所以我有一个简化的数据集,看起来像这样:
Year ID Sum
2009 999 100
2009 123 85
2009 666 100
2009 999 100
2009 123 90
2009 666 85
2010 999 100
2010 123 100
2010 666 95
2010 999 75
2010 123 100
2010 666 85
我想添加一个列,其中包含按年份和ID计算的累计和。如下所示:
Year ID Sum Cum.Sum
2009 999 100 100
2009 123 85 85
2009 666 100 100
2009 999 100 200
2009 123 90 175
2009 666 85 185
2010 999 100 100
2010 123 100 100
2010 666 95 95
2010 999 75 175
2010 123 100 200
2010 666 85 180
我认为这应该是非常直截了当的,但不知何故,我还没能弄清楚。我该怎么做呢?谢谢你的帮助!
发布于 2013-09-20 20:53:50
使用data.table
require(data.table)
DT <- data.table(DF)
DT[, Cum.Sum := cumsum(Sum), by=list(Year, ID)]
Year ID Sum Cum.Sum
1: 2009 999 100 100
2: 2009 123 85 85
3: 2009 666 100 100
4: 2009 999 100 200
5: 2009 123 90 175
6: 2009 666 85 185
7: 2010 999 100 100
8: 2010 123 100 100
9: 2010 666 95 95
10: 2010 999 75 175
11: 2010 123 100 200
12: 2010 666 85 180
发布于 2013-09-20 21:00:05
另一种方式
1)使用ddply将变量按group求和(类似SQL group by)
X <- ddply ( dataset, .(Year,ID), sum)
2)将结果与数据集合并
Y <- merge( dataset, X, by=('Year','ID')
发布于 2020-11-14 01:35:52
您可以使用dplyr和基本函数cumsum
require(dplyr)
dataset %>%
group_by(Year, ID) %>%
mutate(cumsum = cumsum(Sum)) %>%
ungroup()
https://stackoverflow.com/questions/18925600
复制