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

R 为机器学习准备时间序列-从长到宽格式,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

我有一个“长”格式的时间序列数据框架,其中每天有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
>输入
月日臭氧
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
输出
月日臭氧臭氧。前1臭氧。前2臭氧
15141NA
2523641NA
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

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