我想使用很少的输入来融合具有许多列的数据帧。
我使用的数据框通常有许多列,其中的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列不连续,我该怎么办?
在我重塑的所有文档中,包括Hadley的论文/演示文稿,我还没有看到如何轻松地做到这一点。
我确信我在这里错过了一些非常简单的事情......
答案 0 :(得分:1)
好吧,我刚才意识到我可以像这样嵌套我的c
melt(mydata, id=c(c(1:7),9,10,12)
很抱歉让问题过于复杂: - \
编辑:哇。我以为我试过c(1:7,9,10,12)并且R抱怨了。但我现在尝试它没关系。这是一个loooooooong日。答案 1 :(得分:0)
您需要对某些内容进行调整,无论是列名,列的类或您之前在代码中填充的某些列表中的模式。 R不能神奇地确定哪些列是哪个。