【发布时间】:2019-03-05 22:26:52
【问题描述】:
我有这样的数据:
test <- data.frame(id = c(1,2,1,5,5,5,6),
time = c(0,1,4,5,6,7,9),
cond = c("a","a","b","a","b","b","b"),
value = c(5,3,2,4,0,3,1),
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
data.table 函数创建一个列“order”,它是基于组 id 的时间顺序。
我想创建一个返回前一个值但仅在条件为“b”时返回的列。如果条件为“a”,则返回当前值,如果条件为“b”且前一个为“b”,则跳至下一个非“b”。如果组的第一个条件是“b”则返回NA。
想要的输出应该是这样的:
id time cond value order prev
1 0 a 5 1 5
2 1 a 3 1 3
1 4 b 2 2 5
5 5 a 4 1 4
5 6 b 0 2 4
5 7 b 3 3 4
6 9 b 1 1 NA
我已经尝试了一些类似的功能,但只返回了 NA。
test[, prev := shift(value[cond == 'b']), .(id,order)]
【问题讨论】:
标签: r data.table