首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为机器学习准备时间序列-从长到宽格式

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

Stack Overflow用户
提问于 2013-11-06 13:14:44
回答 1查看 217关注 0票数 2

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

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

代码语言:javascript
复制
> 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

我想转换这个输入,使它看起来如下所示。

代码语言:javascript
复制
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

有什么好的,干净的方法吗?在此之前,非常感谢您。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-06 13:27:38

您可以使用来自lagzoo函数,但是下面的小函数可以在不使用其他包的情况下完成任务:

代码语言:javascript
复制
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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19813077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档