Cumsum分组和处理NAs

时间:2017-09-01 09:35:07

标签: r datatable na cumsum

我有长格式的数据,如下所示:

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}}

但是,这不起作用。

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