【问题标题】:Prepare Time Series for Machine Learning - Long to Wide Format为机器学习准备时间序列 - 长格式到宽格式
【发布时间】:2013-11-06 13:14:44
【问题描述】:

我有一个“长”格式的时间序列数据数据框,每天有 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

有什么好的、干净的方法可以做到这一点吗?非常感谢。

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以使用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
    

    【讨论】:

      猜你喜欢
      • 2021-03-08
      • 2015-09-19
      • 2018-04-09
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 1970-01-01
      • 2018-08-26
      相关资源
      最近更新 更多