我有长格式的数据,如下所示:
cumsum()
我想为dt$Value
计算cum<-c(1,1,4,4,NA,NA,10,10)
dt.cum<-cbind(dt,cum)
,结果应如下所示:
dt
我将dt[, cum := cumsum(ifelse(is.na(dt$Value), 0, dt$Value)) +dt$Value*0, by="CW"]
格式化为数据表并尝试了类似:
{{1}}
但是,这不起作用。
答案 0 :(得分:2)
首先,不要使用cbind
来创建数据框。 cbind
会返回matrix
,在这种情况下,其所有元素都会被强制转换为character
类。
dt <- data.frame(ID,CW,Value)
现在,这是一个基础R
解决方案。函数ave
适用于此类问题。
dt$cum <- ave(dt$Value, dt$CW, FUN = function(x) cumsum(ifelse(is.na(x), 0, x)))
is.na(dt$cum) <- is.na(dt$Value)
dt$cum
[1] 1 1 4 4 NA NA 10 10