如何使用来自另一个变量的滞后位置获取变量的值?

How I get the value of a variable using the lag position that comes from another variable?

我正在尝试获取来自其他变量 (A) 给出的滞后位置的变量 (B) 的值。

变量是这样的:

#    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)