gpt4 book ai didi

r - 使用 dplyr 转置时间序列(有滞后的变异)

转载 作者:行者123 更新时间:2023-12-04 05:59:10 28 4
gpt4 key购买 nike

我想转置时间序列数据集以输入到一些机器学习算法中。这是我想做的一个例子,除了滞后的数量很大,我正在寻找一种更优雅的方法来做到这一点:

    set.seed(42)
data <- data.frame(time = 1:5, value = rnorm(5))
data
# time value
# 1 1 1.3709584
# 2 2 -0.5646982
# 3 3 0.3631284
# 4 4 0.6328626
# 5 5 0.4042683
data %>%
mutate(lag_1 = lag(value),
lag_2 = lag(value, 2),
lag_3 = lag(value, 3),
lag_4 = lag(value, 4),
lag_5 = lag(value, 5))
# time value lag_1 lag_2 lag_3 lag_4 lag_5
# 1 1 1.3709584 NA NA NA NA NA
# 2 2 -0.5646982 1.3709584 NA NA NA NA
# 3 3 0.3631284 -0.5646982 1.3709584 NA NA NA
# 4 4 0.6328626 0.3631284 -0.5646982 1.3709584 NA NA
# 5 5 0.4042683 0.6328626 0.3631284 -0.5646982 1.370958 NA

最佳答案

您可以更方便地使用 data.table 进行转换,因为 data.table 中的 shift 允许使用参数 n是向量,而 dplyr 中的 lag 函数不是向量。

library(data.table)
> setDT(data)[, paste("lag", 1:5, sep = "_") := shift(value, 1:5)]
> data
time value lag_1 lag_2 lag_3 lag_4 lag_5
1: 1 -1.4162466 NA NA NA NA NA
2: 2 -0.2366333 -1.4162466 NA NA NA NA
3: 3 0.5146632 -0.2366333 -1.4162466 NA NA NA
4: 4 1.9243923 0.5146632 -0.2366333 -1.4162466 NA NA
5: 5 1.6161165 1.9243923 0.5146632 -0.2366333 -1.416247 NA

要更具体地了解 shiftlag,这里有一个示例,说明 lag 函数不允许您执行哪些操作shift 可以。

> vec <- 1:10
> shift(vec, 1:2)
[[1]]
[1] NA 1 2 3 4 5 6 7 8 9

[[2]]
[1] NA NA 1 2 3 4 5 6 7 8

> lag(vec, 1:2)
Error in lag(vec, 1:2) : n must be a single positive integer
In addition: Warning message:
In if (n == 0) return(x) :
the condition has length > 1 and only the first element will be used

关于r - 使用 dplyr 转置时间序列(有滞后的变异),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37128099/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com