data.table根据组的滞后值删除行 [英] data.table remove rows based on lag value by group
本文介绍了data.table根据组的滞后值删除行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个 data.table
,格式如下:
DT <- data.table(tag = rep(c("A", "B"), each = 10),
value = c(0, 3, 3, 3, 0, 1, 1, 1, 3, 0,
0, 1, 3, 1, 0, 3, 0, 1, 1, 0))
> DT
tag value
1: A 0
2: A 3
3: A 3
4: A 3
5: A 0
6: A 1
7: A 1
8: A 1
9: A 3
10: A 0
11: B 0
12: B 1
13: B 3
14: B 1
15: B 0
16: B 3
17: B 0
18: B 1
19: B 1
20: B 0
我想删除所有值为3的行,但只有那些跟随0的行。也就是说,我要删除第2、3、4和16行,但需要保留第9行和第13行。
I would like to remove all the rows that have value of 3 but only those follow a 0. That is I would like to remove row 2, 3, 4 and row 16, but need to keep row 9 and row 13.
是否可以执行此操作?
推荐答案
可能的解决方案:
DT[, `:=` (threes = rleid(value==3), apz = value == 3 & shift(value) == 0)
][, if (all(!apz)) .SD, by = threes
][, c('threes','apz') := NULL]
它给出:
tag value
1: A 0
2: A 0
3: A 1
4: A 1
5: A 1
6: A 3
7: A 0
8: B 0
9: B 1
10: B 3
11: B 1
12: B 0
13: B 0
14: B 1
15: B 1
16: B 0
这篇关于data.table根据组的滞后值删除行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文