r - 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]
为DT
NA,即数字为 2 和 8 的行DT
?也就是说,如何将每组的前一行分别设置为 NA。
请注意:DT
我们可以看到当 y 等于 6 时有 3 行,但是对于组 a(第 nr 4 行)我不想将上一行设置为NA
,因为上一行属于不同的组。
所以我想要的不同术语是数据表中某些元素的先前索引。那可能吗?如果一个人可以追溯到 1 个时期以上,那也会很有趣。感谢您的任何提示。
解决方案
您可以找到当前 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]
推荐阅读
- ansible - oneliner 用于压缩列表和字典
- inheritance - 无法调用受保护的基本方法
- javascript - 如何从 json 数据中公开图像
- angular - 可观察的缓存和缓存清除,而不会使 Angular 中的订阅无效
- django - 我无法将 ListModelMixin 类作为动作装饰器进行分页
- autodesk-forge - Revit IFC 导出缺少某些内容
- javascript - How can I get all checkbox values via jQuery?
- python - 关闭子进程的 Popen.communication 出现问题
- python - 我不知道如何在 python 中为我的神经网络选择权重
- python - 使用加密函数将 Python 2 转换为 3