每组R个先前索引

时间:2018-09-11 00:28:27

标签: r data.table

如果有特定条件,我试图将每个组的先前观察值设置为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个周期以上,那也将很有趣。感谢您的提示。

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]
相关问题