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

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)

【讨论】:

以上是关于如何使用来自另一个变量的滞后位置获取变量的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据另一个变量设置变量的值?

如何将变量的值从一个 div 传递到同一模板中的另一个 div?

如何从另一个if条件中的一个if条件中获取变量的值?

js如何输出一个变量的值?

如何获取 API 并使用在另一个函数中获得的值?

SHELL中SED如何获取变量的值???