【问题标题】:Reshape Data into Time Series using R使用 R 将数据重塑为时间序列
【发布时间】:2013-06-04 20:22:38
【问题描述】:

我有一个看似简单的问题,我想不通。我想获取一个数据集,其中每个时间段都有自己的变量(即列)用于观察并重新格式化它,以便每个观察值只有一个随时间段变化的变量。我目前的数据如下:

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

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

【问题讨论】:

    标签: r time-series reshape


    【解决方案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排序。

    【讨论】:

      【解决方案2】:

      您的问题的根源是cbind() 用于附加列,而您正在寻找合并行和列。有很多不同的方法可以解决这个问题,但是如果您的示例实际上很简单(即:只有这几列),那么通过data.frame() 创建两个数据框然后通过rbind() 组合它们很容易:

      > rbind(data.frame(obs,y2=y1,T=1),data.frame(obs,y2,T=2))
        obs y2 T
      1   1  5 1
      2   2  6 1
      3   3  7 1
      4   4  8 1
      5   1  9 2
      6   2 10 2
      7   3 11 2
      8   4 12 2
      

      【讨论】:

        猜你喜欢
        • 2014-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多