使用R将数据重新整形为时间序列

时间:2013-06-04 20:22:39

标签: r time-series reshape

我有一个看似简单的问题,我无法弄清楚。我想采用一个数据集,其中每个时间段都有自己的变量(即列)用于观察并重新格式化,使得每个时间段只有一个变量,其范围随时间变化。我目前的数据如下:

obs <- 1:4
y1 <- 5:8
y2 <- 9:12  
data_matrix <- cbind(obs, y1, y2)   

产生:

     obs y1 y2
[1,]   1  5  9
[2,]   2  6 10
[3,]   3  7 11
[4,]   4  8 12

我希望它看起来像(也创建一个时间段变量,T):

     obs  T y2
[1,]   1  1  5
[2,]   1  2  9
[3,]   2  1  6
[4,]   2  2 10
[5,]   3  1  7
[6,]   3  2 11
[7,]   4  1  8
[8,]   4  2 12

感谢您就如何重塑这一点提出任何建议。

2 个答案:

答案 0 :(得分:1)

问题的根源是cbind()用于追加列,并且您希望将行和列组合在一起。有很多不同的方法来解决这个问题,但是如果你的例子实际上很简单(即:只有这几列)那么很容易通过data.frame()创建两个数据帧然后通过{{1}组合它们}}:

rbind()

答案 1 :(得分:1)

您可以重塑数据:

data_matrix<-data.frame(data_matrix)
reshape(data_matrix,varying=list(2:3),times=names(data_matrix)[2:3],idvar="obs",v.names="value",direction="long")

返回:

     obs time value
1.y1   1   y1     5
2.y1   2   y1     6
3.y1   3   y1     7
4.y1   4   y1     8
1.y2   1   y2     9
2.y2   2   y2    10
3.y2   3   y2    11
4.y2   4   y2    12

然后你可以用obs进行排序。