1

我有一个看似简单的问题,我无法弄清楚。我想获取一个数据集,其中每个时间段都有自己的变量(即列)进行观察,并重新格式化它,使每个观察值只有一个随时间段变化的变量。我当前的数据如下所示:

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

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

4

2 回答 2

1

您的问题的根源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
于 2013-06-04T20:49:05.873 回答
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 对其进行排序。

于 2013-06-04T21:08:46.670 回答