当条件为TRUE且后面有N行时,如何获取行?如果N行中任何一行的条件为TRUE,请重新开始计数。也为每个小组执行此操作。
dt = data.table(a = rep(c("a","b","c"), each = 5), b = 1:15)
dt[, condition := b%%4 == 0]
> dt
a b condition **desiredOutcome**
1: a 1 FALSE FALSE
2: a 2 FALSE FALSE
3: a 3 FALSE FALSE
4: a 4 TRUE TRUE
5: a 5 FALSE TRUE
6: b 6 FALSE FALSE
7: b 7 FALSE FALSE
8: b 8 TRUE TRUE
9: b 9 FALSE TRUE
10: b 10 FALSE TRUE
11: c 11 FALSE FALSE
12: c 12 TRUE TRUE
13: c 13 FALSE TRUE
14: c 14 FALSE TRUE
15: c 15 FALSE FALSE
desiredOutcome
基于N=2
并按列a
分组。最好的方法是什么?
答案 0 :(得分:3)
找到了总结shift
结果的方法,即矢量列表。
dt[, desiredOutcome := Reduce('+', shift(con, 0:2, fill = 0)), by = a]
答案 1 :(得分:1)
我们可以尝试
dt[dt[, {i1 <- which(condition); .I[i1:pmin((i1+2), .N)]} , a]$V1,
desiredOutcome:= TRUE][is.na(desiredOutcome), desiredOutcome := FALSE][]
# a b condition desiredOutcome
# 1: a 1 FALSE FALSE
# 2: a 2 FALSE FALSE
# 3: a 3 FALSE FALSE
# 4: a 4 TRUE TRUE
# 5: a 5 FALSE TRUE
# 6: b 6 FALSE FALSE
# 7: b 7 FALSE FALSE
# 8: b 8 TRUE TRUE
# 9: b 9 FALSE TRUE
#10: b 10 FALSE TRUE
#11: c 11 FALSE FALSE
#12: c 12 TRUE TRUE
#13: c 13 FALSE TRUE
#14: c 14 FALSE TRUE
#15: c 15 FALSE FALSE