34

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
4

4 に答える 4

30
ddply(df, "X1", numcolwise(sum))

詳細?numcolwiseと例については、を参照してください。

于 2013-02-24T01:45:48.017 に答える
25

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)
于 2013-02-24T01:48:38.147 に答える
6

aggregateは、次のようなものに最適な機能です。

aggregate(df[,-1],df["X1"],sum)

  X1 X2 X3
1  a  4  7
2  b  5  3
3  c  8  7

numcolwiseそして、 plyrのメソッドのベース R バージョン:

aggregate(df[,sapply(df,is.numeric)],df["X1"],sum)
于 2013-02-24T01:47:35.583 に答える
5

data.tableメモリ効率とコーディングの優雅さのためのソリューション

library(data.table)
DT <- data.table(df)


DT[, lapply(.SD, sum), by = X1]

.SDの値によって定義される各グループの data.table のサブセットですX1data.tableパッケージに関連付けられた 3 つの役立つビネットがあります。

于 2013-02-24T22:46:37.573 に答える