首页 > 解决方案 > data.table R 滞后条件和总和值

问题描述

我有一些这样的数据:

test <- data.frame(id = c(1,2,1,5,5,5,6,7),
           time = c(0,1,4,5,6,7,9,10),
           cond = c("a","a","b","a","b","b","b","b"),
           value = c(5,3,2,4,0,3,1,2), 
           stringsAsFactors=F)

 setDT(test)[,order := order(time),id][order(id,order)]

 id time cond value order
 1  0    a    5     1
 2  1    a    3     1
 1  4    b    2     2
 5  5    a    4     1
 5  6    b    0     2
 5  7    b    3     3
 6  9    b    1     1
 7  10   b    2     1

我想返回条件=“a”的值,或者将条件=“b”的行的先前值相加,并将它们归因于按id分组的前一个“a”行。在“b”行没有前面的“a”行的情况下,该行将被删除。所以前面的例子会产生这个数据表。

id time cond value order sum
1  0    a    5     1     7
2  1    a    3     1     3
5  5    a    4     1     7

像这样的函数适用于序列中只有 1 个“b”行的简单情况:

library(zoo)
test[cond != 'b', prev := value]
test[, prev := na.locf(prev), id]

但是我不确定如何对以前的值求和,而不仅仅是返回前一行。

标签: rdata.table

解决方案


推荐阅读