2017-09-11 23 views
0

私はクライアント名と領域データを含むデータフレームを持っています。複数の列の値に基づいて合計値を計算する方法

私はいくつかの領域は、(例えば、Client AFloor 2Floor 1248202を有していてもよい)複数のフロアをまたがって、各クライアントの総面積を算出します。

合計領域で新しい列を作成したいとします。

私は新しい列を作成する方法を知っている:

areas$new_area 

を私は各クライアントの総面積(手動)を計算する方法を知っている:

sum(areas[areas$client == "Client A", "areas"]) 

私はとの難しさが生じていますどのようなデータフレームを繰り返し、プロセス全体を自動化します。

私は、データフレームを反復する部分的な解決策を考え出しましたが、位置の各クライアントの各領域値の合計を計算します(これは常に、もちろんarea列):(

for(i in 1:nrow(areas)){ 
    areas$new_area[i] <- sum(areas$areas[i]) 
} 

はまた、私は/ apply機能はほぼ確実にここに取るべきアプローチであることを知っている疑いがあるが、私は使用するかを知らないでも、それを適用する方法がありません言い訳は意図している)。

どのようにすればa)これを達成し、b)をよりクリーンな方法で達成できますか?

私の期待される出力は次のようなもの(またはそれのいくつかのバリエーション)である:

-------------------------------------- 
| Client | Floor | Area | New Area | 
-------------------------------------- 
| A | 1 | 202 | 202  | 
-------------------------------------- 
| A | 2 | 248 | 450  | 
-------------------------------------- 
| B | 1 | 1000 | 1000 | 
-------------------------------------- 
| B | 2 | 150 | 1150 | 
-------------------------------------- 

私は最後に新しい列をしたいクライアントごとに全エリアの値の合計で(私の例では、累積を示しそれが累積かどうかは問題ではありません - それは単に例を挙げる目的のためだけです)。

+0

@agenisで合計を計算することができます。 – MusTheDataGuy

+1

あなたが必要としているのはグループ単位で集計することだけです。その答えが助けになる場合は? https://stackoverflow.com/q/1660124/3871924 – agenis

答えて

1
summedAreas <- aggregate(Area ~ Client, areas, sum) 
allYourData <- merge(Area, summedAreas, by = "Client") 

私は戻って素敵なdata.frameを取得するので、私はtapply以上の集約を好むが、私は質問を更新しました

tapply(X = areas$Area, INDEX = areas$Client, FUN = sum) 
関連する問題