所以我有一个简化了这样的数据集:
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
我认为这应该是非常简单的,但不知怎的,我无法弄明白。我该怎么做呢?谢谢你的帮助!
答案 0 :(得分:29)
使用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
答案 1 :(得分:1)
另一种方式
1)使用ddply按组对变量求和(类似于SQL group by)
X <- ddply ( dataset, .(Year,ID), sum)
2)将结果与数据集
合并Y <- merge( dataset, X, by=('Year','ID')
答案 2 :(得分:0)
您可以使用dplyr和基本功能cumsum:
require(dplyr)
dataset %>%
group_by(Year, ID) %>%
mutate(cumsum = cumsum(Sum)) %>%
ungroup()