首页 > 解决方案 > R 每组的前一个索引

问题描述

如果适用特定条件,我正在尝试将每组的先前观察设置为 NA。

假设我有以下数据表:

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]

如何将 inside 的前几行设置DT[y == 6]DTNA,即数字为 2 和 8 的行DT?也就是说,如何将每组的前一行分别设置为 NA。

请注意:DT我们可以看到当 y 等于 6 时有 3 行,但是对于组 a(第 nr 4 行)我不想将上一行设置为NA,因为上一行属于不同的组。

所以我想要的不同术语是数据表中某些元素的先前索引。那可能吗?如果一个人可以追溯到 1 个时期以上,那也会很有趣。感谢您的任何提示。

标签: rdata.table

解决方案


您可以找到当前 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]

推荐阅读