web-dev-qa-db-ja.com

グループごとに変数のリストの合計を計算する

1つのキーと約100の数値行を含むdata.tableがあり、そのうちの1つはkeyに設定されています。キーごとにグループ化された各数値行の合計を含む新しい変数を作成したいと思います。

たとえば、現在のデータは

ID Count1 Count2 Count3
1   1      3      0
1   3      3      3
2   1      2      1
3   1      1      2

私が持ちたいのは:

ID Count1 Count2 Count3
1   4      6      3
2   1      2      1
3   1      1      2

私はこれを得るために非常に多くの方法を試しました。私ができることを知っています:

Y <- X[, list(Count=sum(Count1), Count2=sum(Count2), Count3=sum(Count3), by = ID]

しかし、私は何百もの変数を持ち、それらの名前だけをリストに載せています。これをどのように処理すればよいですか?

ご協力ありがとうございます。

テストデータを生成するコードは次のとおりです。

ID <-c(rep(210, 9), rep(3917,6))
Count1 <- c(1,1,0,1,3,1,4,1,1,1,1,1,1,0,1)
Count2 <- c(1,0,0,1,0,1,0,1,1,1,1,1,1,0,1)
Count3 <- c(1,0,0,1,0,1,0,1,1,1,1,1,1,0,1)
x <- data.table(ID, Count1, Count2, Count3)
setkey(x, ID)
23
AdamNYC

テストデータは指定した例と一致しませんが、それにもかかわらず-data.table()には「データのサブセット」に対して_.SD_という名前の演算子があるという事実を利用できます。

_x[, lapply(.SD, sum), by = ID]
#----
     ID Count Count2 Count3
1:  210    13      5      5
2: 3917     5      5      5
_

これは実際にFAQでカバーされています:vignette("datatable-faq", package="data.table")を入力するか、見つけてください online

27
Chase

Data.tableはdata.frameであるため、これに集約を使用できます。

> aggregate(. ~ ID, data=x, FUN=sum)
    ID Count1 Count2 Count3
1  210     13      5      5
2 3917      5      5      5
11