我有一个看似简单的问题,我无法弄清楚。我想采用一个数据集,其中每个时间段都有自己的变量(即列)用于观察并重新格式化,使得每个时间段只有一个变量,其范围随时间变化。我目前的数据如下:
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
感谢您就如何重塑这一点提出任何建议。
答案 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进行排序。