我有一个“长”格式的时间序列数据框架,其中每天有1行/观察。我想把这些数据转换成“宽”格式。每一行/观察应具有当前日期和前两天的时间序列值。
为了提供一个具体的例子,我将使用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有什么好的,干净的方法吗?在此之前,非常感谢您。
发布于 2013-11-06 13:27:38
您可以使用来自lag的zoo函数,但是下面的小函数可以在不使用其他包的情况下完成任务:
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 36https://stackoverflow.com/questions/19813077
复制相似问题