首页 文章

重塑熔体 - 最简单的方式来引用正确的ID和MEASURED列

提问于
浏览
0

问题

我想使用很少的输入来融合具有许多列的数据帧 .

我使用的数据框通常有许多列,其中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的论文/演示文稿,我还没有看到如何轻松地做到这一点 .

我敢肯定我在这里错过了很简单的东西......

2 回答

  • 1

    您需要对某些内容进行调整,无论是列名称,列的类或您之前在代码中填充的某些列表中的模式 . R不能神奇地弄清楚哪些列是哪个 .

  • 0

    好吧,我刚刚意识到我可以像这样嵌套我的c

    melt(mydata, id=c(c(1:7),9,10,12)
    

    抱歉让问题过于复杂: -

    编辑:哇 . 我以为我试过c(1:7,9,10,12)并且R抱怨 . 但我现在尝试它没关系 . 这是一个loooooooong日 .

相关问题