问题
我想用很少的打字来融化一个有很多列的数据框。
我使用的数据框通常有很多列,其中的 ID 可能是数字、字符或因子。ID 和 MEASURED 列通常不连续。
我该怎么办?
有没有类似的东西melt(mydata, id=c(1:7,9,10,12), measured=c(8,11)
?
例子
我有一个如下所示的数据框
id1 <- round(abs(rnorm(5)),1)
id2 <- sample(letters,5)
id3 <- sample(letters,5)
id4 <- sample(letters,5)
id5 <- sample(letters,5)
id6 <- round(abs(rnorm(5)),1)
id7 <- sample(letters,5)
m1 <- round(abs(rnorm(5)),1)
id8 <- sample(letters,5)
id9 <- sample(letters,5)
m2 <- round(abs(rnorm(5)),1)
id10 <- sample(letters,5)
mydata <- data.frame(id1,id2,id3,id4,id5,id6,id7,m1,id8,id9,m2,id10)
导致....
id1 id2 id3 id4 id5 id6 id7 m1 id8 id9 m2 id10
1.5 c i r m 1.8 f 0.1 x g 0.7 t
0.4 n o q b 0.9 s 0.1 f x 0.0 m
1.6 b g s i 0.7 i 0.5 d z 1.3 b
0.6 g s j k 0.3 j 0.8 p i 0.4 d
0.5 z e i s 0.4 r 0.8 k y 0.9 a
其中“id”表示我想要作为 ID 的列,“m”表示我想要作为 MEASURED 变量的列。注意:我的专栏实际上并不遵循“id_”或“m_”模式——它们可以是任何东西。
我如何正确并快速地让融化按我的意愿工作?
我宁愿不必写出来
melt(mydata, id = c("id1","id2",etc, etc, etc), measured = c("m1","m2))
如果我所有的 ID 变量都是字符,我知道我可以写
melt(mydata, measured = c("m1","m2))
但是因为我有字符/因子 ID 列,所以我得到了这个(不正确的)输出
x id2 id3 id4 id5 id7 id8 id9 id10 variable value
1 c i r m f x g t id1 1.5
2 n o q b s f x m id1 0.4
3 b g s i i d z b id1 1.6
4 g s j k j p i d id1 0.6
5 z e i s r k y a id1 0.5
6 c i r m f x g t id6 1.8
7 n o q b s f x m id6 0.9
8 b g s i i d z b id6 0.7
9 g s j k j p i d id6 0.3
10 z e i s r k y a id6 0.4
11 c i r m f x g t m1 0.1
12 n o q b s f x m m1 0.1
13 b g s i i d z b m1 0.5
14 g s j k j p i d m1 0.8
15 z e i s r k y a m1 0.8
16 c i r m f x g t m2 0.7
17 n o q b s f x m m2 0.0
18 b g s i i d z b m2 1.3
19 g s j k j p i d m2 0.4
20 z e i s r k y a m2 0.9
如果我的数据框 ID 和 MEASURED 列像这样连续
mydata <- data.frame(id1,id2,id3,id4,id5,id6,id7,id8,id9,id10,m1,m2)
那么我可以轻松地使用范围
melt(mydata, id=1:10, measured = 11:12)
但是,如果我的 ID/Measured 列不连续,我该怎么办?
在我在 reshape 上看到的所有文档中,包括 Hadley 的论文/演示文稿,我还没有看到如何轻松地做到这一点。
我确定我在这里遗漏了一些非常简单的东西......