R data.table,如何重置累计金额(或将组添加到分组依据)
我有一个带有一些计算列的数据表R data.table,如何重置累计金额(或将组添加到分组依据),r,data.table,R,Data.table,我有一个带有一些计算列的数据表 dt <- data.table(x=c(1,4,-3,-2,3,4)) dt[,y:=cumsum(x)] dt[,q:=cumsum(ifelse(x>0,x,0))] x y q 1: 1 1 1 2: 4 5 5 3: -3 2 5 4: -2 0 5 5: 3 3 8 6: 4 7 12 我想我可以介绍另一个列组,其值为A,B,。。。在y==0之后,它会改变,然后通过expression在中使用它,但我不知道如何
dt <- data.table(x=c(1,4,-3,-2,3,4))
dt[,y:=cumsum(x)]
dt[,q:=cumsum(ifelse(x>0,x,0))]
x y q
1: 1 1 1
2: 4 5 5
3: -3 2 5
4: -2 0 5
5: 3 3 8
6: 4 7 12
我想我可以介绍另一个列组,其值为A,B,。。。在y==0之后,它会改变,然后通过expression在中使用它,但我不知道如何(至少除了使用for子句之外)尝试这样的方法
dt[, group:= cumsum(y == 0)]
dt[y == 0, group := group - 1]
dt[, q:=cumsum(ifelse(x>0,x,0)), by = group]
dt
# x y group q
#1: 1 1 0 1
#2: 4 5 0 5
#3: -3 2 0 5
#4: -2 0 0 5
#5: 3 3 1 3
#6: 4 7 1 7
您可以将条件
c(0L,cumsum(y==0L))[-length(y)]
添加到by
语句中
dt[, q := cumsum(ifelse(x > 0, x, 0)), by = c(0L, cumsum(y == 0L))[-length(y)]][]
# x y q
# 1: 1 1 1
# 2: 4 5 5
# 3: -3 2 5
# 4: -2 0 5
# 5: 3 3 3
# 6: 4 7 7
使用
data.table
devel版本
dt[, q:=cumsum(ifelse(x>0,x,0)),by=shift(cumsum(y==0),1, fill=0)]
#library(devtools)
#install_github("Rdatatable/data.table", build_vignettes = FALSE)
# x y q
#1: 1 1 1
#2: 4 5 5
#3: -3 2 5
#4: -2 0 5
#5: 3 3 3
#6: 4 7 7
数据表中y列中有多少个0?类似于
dt[,q:=cumsum((x>0)*x),by=cumsum(y==0)]
?但是我不知道你为什么想要第4行的5我有点困惑你想要什么,所以你想要1:4的总和,而不是5:6的新的??你需要这里的devel版本。看起来很有趣,但我不能在这个项目上使用devel谢谢!现在,我将继续使用更详细的实现,因为我实际上刚刚开始使用RI,它有一个类似的案例,经过轻微修改,效果很好。做得好。
dt[, q:=cumsum(ifelse(x>0,x,0)),by=shift(cumsum(y==0),1, fill=0)]
#library(devtools)
#install_github("Rdatatable/data.table", build_vignettes = FALSE)
# x y q
#1: 1 1 1
#2: 4 5 5
#3: -3 2 5
#4: -2 0 5
#5: 3 3 3
#6: 4 7 7