如何使用来自另一个变量的滞后位置获取变量的值?
Posted
技术标签:
【中文标题】如何使用来自另一个变量的滞后位置获取变量的值?【英文标题】:How I get the value of a variable using the lag position that comes from another variable? 【发布时间】:2022-01-17 06:29:23 【问题描述】:我正在尝试获取来自其他变量 (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
我已经用循环完成了,但是因为它有大量的信息,所以要等待很多时间。我希望有人能给我一个想法。
【问题讨论】:
为什么重复了20个?即第 4 行有 20 个 因为A
给出了滞后量,而A
在第4行是2。
因为 A 列告诉我,我必须获得高于 40 的 2 位的值(B 列)。我不知道我是否清楚。
啊,我看到了问题,A
从您的示例输入更改为您的示例输出。在第 4 行中,A
在您的第一个代码块中为 1,但 A
在您的第二个代码块中为 2。
感谢您的帮助!
【参考方案1】:
这是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)
【讨论】:
以上是关于如何使用来自另一个变量的滞后位置获取变量的值?的主要内容,如果未能解决你的问题,请参考以下文章