是否有可能滞后 r 中按时间索引的数据帧的值?

Is there a possibility to lag values of a data frame in r indexed by time?

我的问题涉及 r 中的滞后数据,其中 r 应该知道时间索引。我希望这个问题没有在任何进一步的线程中被问到。让我们考虑一个简单的设置:

df <- data.frame(date=as.Date(c("1990-01-01","1990-02-01","1990-01-15","1990-03-01","1990-05-01","1990-07-01","1993-01-02")), value=1:7)

这段代码应该生成一个 table 像

date value
1990-01-01 1
1990-02-01 2
1990-01-15 3
1990-03-01 4
1990-05-01 5
1990-07-01 6

我现在的目标是尝试将“价值”滞后于例如一个月,例如,当我尝试计算“1990-05-01”的滞后值(应该是 1990-04-01 但不存在于数据中)时,应该在特定行中生成一个 NA。当我使用标准滞后函数时,r 不知道时间索引,只是使用 1990-03-01 的值“4”,这不是我想要的。有人知道我可以在这里做什么吗?

提前致谢! :)

祝一切顺利,

里昂

您可以尝试 %m-% 如下所示的滞后月份

library(lubridate)
transform(
  df,
  value_lag = value[match(date %m-% months(1), date)]
)

这给出了

        date value value_lag
1 1990-01-01     1        NA
2 1990-02-01     2         1
3 1990-01-15     3        NA
4 1990-03-01     4         2
5 1990-05-01     5        NA
6 1990-07-01     6        NA
7 1993-01-02     7        NA

对于多列的示例,让我们考虑:

df <- data.frame(date=as.Date(c("1990-01-01","1990-02-01","1990-01-15","1990-03-01","1990-05-01","1990-07-01","1993-01-02")), value=1:7, value2=7:13)

我最近找到了以下解决方案:

df %>%
  as_tibble() %>%
  mutate(across(2:ncol(df), .fns= function(x){x[match(date %m-% months(lags),date)]}, .names="{.col}_lag"))

感谢您的代码@ThomasisCoding。 :)