从宽到长简单地重塑数据帧

时间:2013-01-30 23:23:04

标签: r dataframe reshape

我无法重塑数据框。这一定是非常简单的事情,但我无法解决这个问题。

以下是一个示例数据集:

u<-data.frame(patient=1:9,time=1:3,var1=rnorm(9),var2=rnorm(9),var3=rnorm(9),var5=rnorm(9),var6=rnorm(9))

而不是6,我有20个变量。

我唯一想要的是将这个宽数据集转换为长数据集。另外,我一直在搜索堆栈溢出/谷歌如何做到这一点,但不成功。这里发布的大多数重塑问题似乎比我追求的更难。

我所追求的是:

patient time    variable    value
1          1     var1           1.70484636
2          2    var1         0.19637999
3          3    var1        -1.20419038
4          1    var1        0.06944788
5          2    var1        -1.03074549
6          3    var1        0.9396862
7          1    var1        -0.57904879
8          2    var1        1.16163798
9          3    var1        1.11314472
1          1    var2        0.2138141
2          2    var2        2.9763986
3          3    var2        0.9686543
4          1    var2        0.1321531
5          2    var2        0.844687
6          3    var2        1.1336502
7          1    var2        0.5902222
8       2   var2        1.392971
9       3   var2        1.5335116
1          1    var3        0.93968 62
2          2    var3        2.9763986
3          3    var3            0.844687
....

干杯, LUC

2 个答案:

答案 0 :(得分:1)

您是否在stackoverflow / Google搜索中遇到了reshape2包?

require(reshape2)
melt(u, id = c('patient', 'time'))
#   patient time variable       value
1        1    1     var1  0.25585248
2        2    2     var1 -0.98750355
3        3    3     var1 -0.12871163
4        4    1     var1 -0.11789488
5        5    2     var1 -1.16252583
6        6    3     var1 -0.46498923
7        7    1     var1 -2.11571402
8        8    2     var1 -1.91485293
9        9    3     var1 -0.19154752
10       1    1     var2  2.38927206
[skip]

答案 1 :(得分:0)

您正在寻找reshape2套餐。

require('reshape2')
head(melted.u <- melt(u, id.vars=c('patient', 'time')))

  patient time variable   value
1       1    1     var1 -1.8745
2       2    2     var1  0.6428
3       3    3     var1  0.4367
4       4    1     var1  0.1102
5       5    2     var1 -0.1590
6       6    3     var1  1.7786