r - 为机器学习准备时间序列 - 长格式到宽格式

标签 r

我有一个“长”格式的时间序列数据数据框,其中每天有 1 行/观察。我想将这些数据转换为“宽”格式。每行/观察都应具有当前日期和前 2 天的时间序列值。

为了提供一个具体示例,我将使用 R 中提供的空气质量数据。这就是我的输入数据框的样子。

> input <- airquality[1:4,c("Month", "Day", "Ozone")]
> input
  Month Day Ozone
1     5   1    41
2     5   2    36
3     5   3    12
4     5   4    18

我想转换此输入,使其如下所示。

output <- data.frame(Month = 5, Day = 1:4, Ozone=c(41,36,12,18), Ozone.Prev.1=c(NA,41,36,12), Ozone.Prev.2=c(NA,NA,41,36))
> output
  Month Day Ozone Ozone.Prev.1 Ozone.Prev.2
1     5   1    41           NA           NA
2     5   2    36           41           NA
3     5   3    12           36           41
4     5   4    18           12           36

有什么关于一个好的、干净的方法来做到这一点的建议吗?非常感谢。

最佳答案

您可以使用 zoo 中的 lag 函数,但以下小函数无需使用其他包即可完成此操作:

shift_vector = function(vec, n) c(rep(NA, n), head(vec, -n))
output = transform(input, prev_1 = shift_vector(Ozone, 1), 
                          prev_2 = shift_vector(Ozone, 2))
output
  Month Day Ozone prev_1 prev_2
1     5   1    41     NA     NA
2     5   2    36     41     NA
3     5   3    12     36     41
4     5   4    18     12     36

关于r - 为机器学习准备时间序列 - 长格式到宽格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19813077/

相关文章:

将 R 中的矩阵顺时针旋转 90 度

r - R中的正则表达式:'perl = TRUE'与默认值(PCRE与TRE)

r - 使用 OAuth 和 R 的请求 token 无效 - R 代码是否正确?

r - 数据表元编程

r - 如何删除 "Heading 1"中的数字 - officeR

r - 删除R的一列中具有非数字字符的行

r - 根据前导空格的数量将列分成新列

r - 按组划分数据列

r - 是否可以在 R 中绘制镜像翻转的文本?

r - 包函数中的 stop() 不会结束 Debug模式