如果有特定条件,我试图将每个组的先前观察值设置为NA。
假设我有以下数据表:
oj-input-text
我正在使用简单的条件:
DT = data.table(group=rep(c("b","a","c"),each=3), v=c(1,1,1,2,2,1,1,2,2), y=c(1,3,6,6,3,1,1,3,6), a=1:9, b=9:1)
如何将DT[y == 6]
中DT[y == 6]
的前几行设置为NA,即DT
的数字2和8的行?也就是说,如何将每组中分别在前的行设置为NA。
请注意:从DT
中可以看到,当y等于6时有3行,但是对于组a(行4),我不想将前一行设置为{{1} },因为前一行属于另一个组。
所以我想用不同的术语是数据表中某些元素的先前索引。那可能吗?如果一个人可以回到1个周期以上,那也将很有趣。感谢您的提示。
答案 0 :(得分:3)
您可以找到当前y不是6且下一行是6的行索引,然后将整行设置为NA:
DT[shift(y, type="lead")==6 & y!=6,
(names(DT)) := lapply(.SD, function(x) NA)]
DT
输出:
group v y a b
1: b 1 1 1 9
2: <NA> NA NA NA NA
3: b 1 6 3 7
4: a 2 6 4 6
5: a 2 3 5 5
6: a 1 1 6 4
7: c 1 1 7 3
8: <NA> NA NA NA NA
9: c 2 6 9 1
与往常一样,弗兰克用一个更简洁的版本发表评论:
DT[shift(y, type="lead")==6 & y!=6, names(DT) := NA]