我想在数据表中创建一个新列.根据一列的当前值和另一列的上一列值计算的表.可以访问前几行吗?

例如.:

> DT <- data.table(A=1:5, B=1:5*10, C=1:5*100)
> DT
   A  B   C
1: 1 10 100
2: 2 20 200
3: 3 30 300
4: 4 40 400
5: 5 50 500
> DT[, D := C + BPreviousRow] # What is the correct code here?

正确答案应该是

> DT
   A  B   C   D
1: 1 10 100  NA
2: 2 20 200 210
3: 3 30 300 320
4: 4 40 400 430
5: 5 50 500 540

推荐答案

v1.9.6中实现了shift(),这非常简单.

DT[ , D := C + shift(B, 1L, type="lag")]
# or equivalently, in this case,
DT[ , D := C + shift(B)]

NEWS开始:

  1. 新函数shift()实现vectorlistdata.framesdata.tables中的fast lead/lag.它采用type参数,可以是"lag"(默认值)或"lead".它与:=set()一起使用非常方便.例如:DT[, (cols) := shift(.SD, 1L), by=id].请查看?shift了解更多信息.

有关以前的答案,请参阅历史.

R相关问答推荐

如何在列表的子元素上使用setName

使用lapply的重新定位功能

根据shiny 应用程序中的数字输入更改图标 colored颜色

根据收件箱中的特定值提取列名

在位置周围设定一个半径并识别该半径内的其他位置

x[[1]]中的错误:脚注越界

格点中指数、双曲和反双曲模型曲线的正确绘制

有没有一个R函数允许你从一个数字变量中提取一个数字,而不考虑它的位置(不仅仅是第一个或最后一个数字?

使用ggsankey调整Sankey图中单个 node 上的标签

如何得到R中唯一的组合群?

未识别时区

用关联字符串替换列名的元素

根据元素和前一个值之间的差值过滤矩阵的元素

使用R闪光显示所有数据点作为默认设置

从所有项的 struct 相同的两级列表中,将该第二级中的所有同名项绑定在一起

如何在R中描绘#符号?

在ggplot2的框图中绘制所有级别的系数

为什么在BASE R中绘制线条时会看到线上的点?

有没有办法通过str_Detect()或其他字符串匹配函数来连接两个长度不等的数据帧?

如何更改包中函数中的参数?