3

以下は私が持っているものです:

ID年スコア1199910
1
2000 11
1 2001 14
1 2002 22
2 2000 19
2 2001 17
2 2002 22
3 1998 10
3 1999 12

以下は私がやりたいことです:

ID年スコア合計1199910
10
1 2000 11 21
1 2001 14 35
1 2002 22 57
2 2000 19 19
2 2001 17 36
2 2002 22 48
3 1998 10 10
3 1999 12 22

年数と特定の年は、IDごとに異なります。

ddplyの高度なオプションのように感じますが、答えを見つけることができませんでした。for / whileループも試してみましたが、これらはRで非常に遅く、データセットが大きいため、あまりうまく機能していません。

前もって感謝します!

4

2 に答える 2

2

データが大きい場合は、ddply遅くなります。

data.table行く方法です。

 library(data.table)
 DT <- data.table(dat)
 # create your desired column in `DT`
 DT[, agg.Score := cumsum(Score), by = ID]
于 2013-03-15T00:22:41.200 に答える
2

関数を使用して、すべてのサブグループにsumsum適用できます。ave

transform(dat, Total = ave(Score, ID, FUN = cumsum))

  ID Year Score Total
1  1 1999    10    10
2  1 2000    11    21
3  1 2001    14    35
4  1 2002    22    57
5  2 2000    19    19
6  2 2001    17    36
7  2 2002    22    58
8  3 1998    10    10
9  3 1999    12    22
于 2013-03-14T17:19:15.180 に答える