使用melt()不会按集合ID排序

时间:2018-07-13 18:38:37

标签: r reshape melt

我有数据集:

      Time     a    b
 [1,]    0  5.06 9.60
 [2,]    4  9.57 4.20
 [3,]    8  1.78 3.90
 [4,]   12  2.21 3.90
 [5,]   16  4.10 5.84
 [6,]   20  2.81 8.10
 [7,]   24  2.70 1.18
 [8,]   36 52.00 5.68
 [9,]   48    NA 6.66

我想将其重塑为:

Time variable value
   0        a  5.06
   4        a  9.57
   8        a  1.78
  ...
   0        b  9.60
   4        b  4.20
   8        b  3.90
  ...

我使用的代码是:

library(reshape2)

Time <- c(0,4,8,12,16,20,24,36,48)
a <- c(5.06,9.57,1.78,2.21,4.1,2.81,2.7,52,NA)
b <- c(9.6,4.2,3.9,3.9,5.84,8.1,1.18,5.68,6.66)
Mono <- cbind(Time,a,b)
mono <- melt(Mono,id="Time",na.rm=F)

哪个会产生:

   Var1 Var2 value
1     1 Time  0.00
2     2 Time  4.00
3     3 Time  8.00
4     4 Time 12.00
5     5 Time 16.00
6     6 Time 20.00
7     7 Time 24.00
8     8 Time 36.00
9     9 Time 48.00
10    1    a  5.06
11    2    a  9.57
12    3    a  1.78
13    4    a  2.21
14    5    a  4.10
15    6    a  2.81
16    7    a  2.70
17    8    a 52.00
18    9    a    NA
19    1    b  9.60
20    2    b  4.20
21    3    b  3.90
22    4    b  3.90
23    5    b  5.84
24    6    b  8.10
25    7    b  1.18
26    8    b  5.68
27    9    b  6.66

我确定这是一个小错误,但我无法弄清楚。这尤其令人沮丧,因为我之前多次使用melt()都没有问题。如何修复代码以生成要查找的表? 感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

使用tidyr::gather() long 格式。

> df <- data.frame(time = seq(0,20,5), 
                   a = rnorm(5,0,1), 
                   b = rnorm(5,0,1))

> library(tidyr)
> gather(df, variable, value, -time)

   time variable      value
1     0        a  1.5406529
2     5        a  1.5048055
3    10        a -1.1138529
4    15        a -0.1199039
5    20        a -1.7052608
6     0        b -1.1976938
7     5        b  0.7997127
8    10        b  1.1940454
9    15        b  0.5177981
10   20        b  0.6725264