r-如何使用来自另一个变量的滞后位置来获得变量的值



我正在尝试获取一个变量(B(的值,该变量来自其他变量(a(给出的滞后位置。

变量是这样的:

#    A  B
# 1: 1 10
# 2: 1 20
# 3: 1 30
# 4: 1 40
# 5: 2 50

我希望输出(C(是这样的,第一个值是零,条件从第二行开始:

#    A  B C
# 1: 1 10 0
# 2: 1 20 10
# 3: 1 30 20
# 4: 2 40 20
# 5: 2 50 30

我已经用循环完成了这项工作,但由于信息量很大,需要等待很长时间。我希望有人能给我一个主意。

以下是使用dplyr:的方法

library(dplyr)
x %>%
mutate(
C = c(0, B[(2:n()) - A[-1]])
)
#    A  B  C
# 1: 1 10  0
# 2: 1 20 10
# 3: 1 30 20
# 4: 2 40 20
# 5: 2 50 30

它直接翻译成data.table(行名中有冒号,我想你可能在使用那个包(

library(data.table)
dt = as.data.table(x)
dt[, C := c(0, B[(2:.N) - A[-1]])]
dt
#    A  B  C
# 1: 1 10  0
# 2: 1 20 10
# 3: 1 30 20
# 4: 2 40 20
# 5: 2 50 30

使用此数据:

x = read.table(text ='   A  B
1: 1 10
2: 1 20
3: 1 30
4: 2 40
5: 2 50', header = T)

最新更新