我为不正当的标题道歉。
dt
和d.dt
分别是输入和所需输出。
library(data.table)
set.seed(10)
dt = data.frame(x=sample(10, 3), y=sample(10,3))
dt = as.data.table(dt)
# > dt
# x y
# 1 :6 7
# 2 :3 1
# 3 :4 2
d.dt = dt[, z:=c(-4, 3, NA)]
# > d.dt
# x y z
# 1 :6 7 -4
# 2 :3 1 3
# 3 :4 2 NA
预期的d.dt[, z]
是通过列x
的当前行减去列y
的下一行来计算的。
答案 0 :(得分:2)
根据预期输出,我们似乎正在用当前行'y'减去下一行'x'。要获得后续行或下一行,我们可以使用shift
中的data.table
并使用参数type='lead'
。
dt[, z:= shift(x, type='lead')-y]
dt
# x y z
#1: 6 7 -4
#2: 3 1 3
#3: 4 2 NA