我有一个如下所示的数据框:
> year<-c(2014,2014,2014,2015,2015,2015,2016,2016,2016)
> group<-c("A","B","C","A","B","C","A","B","C")
> n<-c(1,1,1,1,2,0,2,1,1)
> df<-data.frame(year=year,group=group,n=n)
> df
year group n
2014 A 1
2014 B 1
2014 C 1
2015 A 1
2015 B 2
2015 C 0
2016 A 2
2016 B 1
2016 C 1
我想创建一个列,其中包含每个组的累计值n,如下所示:
year group n sum
2014 A 1 1
2014 B 1 1
2014 C 1 1
2015 A 1 2
2015 B 2 3
2015 C 0 1
2016 A 2 4
2016 B 1 4
2016 C 1 2
答案 0 :(得分:1)
我们可以按功能使用其中一个。使用data.table
,将'data.frame'转换为'data.table'(setDT(df1)
,按'分组',我们将:=
分配为cumsum(n)
作为“总和”专栏。
library(data.table)
setDT(df1)[, Sum:= cumsum(n),group]
或者使用base R
,我们可以使用ave
。
df1$Sum <- with(df1, ave(n, group, FUN=cumsum))