1つの列に同じ値を持つ行を合計したい:
> df <- data.frame("1"=c("a","b","a","c","c"), "2"=c(1,5,3,6,2), "3"=c(3,3,4,5,2))
> df
X1 X2 X3
1 a 1 3
2 b 5 3
3 a 3 4
4 c 6 5
5 c 2 2
1つの列(X2)について、データを集計して、同じX1値を持つすべての行の合計を取得できます。
> ddply(df, .(X1), summarise, X2=sum(X2))
X1 X2
1 a 4
2 b 5
3 c 8
X3とX1以外の任意の数の列で同じことを行うにはどうすればよいですか?
これは私が望む結果です:
X1 X2 X3
1 a 4 7
2 b 5 3
3 c 8 7
ddply(df, "X1", numcolwise(sum))
見る ?numcolwise
詳細および例。
aggregate
は、式インターフェイスを使用して簡単にこれを行うことができます。
aggregate(. ~ X1, data=df, FUN=sum)
## X1 X2 X3
## 1 a 4 7
## 2 b 5 3
## 3 c 8 7
同等:
aggregate(cbind(X2, X3) ~ X1, data=df, FUN=sum)
aggregate
は、次のようなものに最適な関数です。
aggregate(df[,-1],df["X1"],sum)
X1 X2 X3
1 a 4 7
2 b 5 3
3 c 8 7
そして、plyrのnumcolwise
メソッドのベースRバージョン:
aggregate(df[,sapply(df,is.numeric)],df["X1"],sum)
メモリ効率とコーディングの優雅さのためのdata.table
ソリューション
library(data.table)
DT <- data.table(df)
DT[, lapply(.SD, sum), by = X1]
.SD
は、X1
の値で定義された各グループのdata.tableのサブセットです。 data.table
パッケージに関連する3つの便利なビネットがあります。