繁体   English   中英

reshape2 :: melt后如何在“长”数据中保留值的分组?

[英]How to retain grouping of values in 'long' data after reshape2::melt?

我正在使用R包重塑的melt功能,并制作了一个双条形图(并排显示),以提供几十种物种的两种不同类型的基因保护的值。

我可以在“宽”时订购此列表,例如arrange(species.table, desc(miR), species)

...            species       miR      snoR
1                  Cow 1.0000000 0.9925373
2                Sheep 1.0000000 0.9925373
3                  Cat 0.9967914 1.0000000
4                  Dog 0.9967914 1.0000000
5                Panda 0.9967914 1.0000000
6     White_rhinoceros 0.9967914 1.0000000
7               Alpaca 0.9775401 0.9626866
8           Guinea_Pig 0.9775401 0.9776119
9                 Pika 0.9775401 0.9626866
10                 Rat 0.9775401 0.9776119
11               Mouse 0.9358289 0.9701493
12               Horse 0.9294118 0.9726368
13                 Pig 0.9294118 0.9726368
14     Chinese_Hamster 0.9155080 0.9527363
...

但是广泛的数据来自两种不同保护类型的保护类型,它们将物种分开。 我如何在列表中使物种“配对”,而不是例如:

...            species variable     value
1                  Cat     snoR 1.0000000
2                  Cow      miR 1.0000000
3                  Dog     snoR 1.0000000
4                Panda     snoR 1.0000000
5                Sheep      miR 1.0000000
6     White_rhinoceros     snoR 1.0000000
7                  Cat      miR 0.9967914
8                  Dog      miR 0.9967914
9                Panda      miR 0.9967914
10    White_rhinoceros      miR 0.9967914
11                 Cow     snoR 0.9925373
12               Sheep     snoR 0.9925373
13            Elephant     snoR 0.9875622
14              Rabbit     snoR 0.9875622
15               Shrew     snoR 0.9875622
16              Tenrec     snoR 0.9875622
17          Guinea_Pig     snoR 0.9776119
18                 Rat     snoR 0.9776119
...

我的直觉是...我必须逐行熔化数据才能实现这一点,并用rbind (或一些更有效的非基R等效项)将所得的行对连接起来。 有更合法的内置方法吗? 即让融化的数据知道我想要一个物种列表并保持同一物种相邻?

例如更像:

...            species variable     value
1                  Cow      miR 1.0000000
2                  Cow     snoR 0.9925373
3                  Dog     snoR 1.0000000
4                  Dog      miR 0.9967914
5                Panda     snoR 1.0000000
6                Panda      miR 0.9967914
7                Sheep      miR 1.0000000
8                Sheep     snoR 0.9925373
9     White_rhinoceros      miR 0.9967914
10    White_rhinoceros     snoR 1.0000000
...

从广泛的数据开始,我认为您希望按每种物种的两个表达值的总和进行排序:

library(dplyr)
library(tidyr)
dat %>% mutate(new = miR + snoR) %>%
        gather(type, expression, -species, -new) %>%
        arrange(desc(new), species, type) %>%
        select(-new)

            species type expression
1               Cat  miR  0.9967914
2               Cat snoR  1.0000000
3               Dog  miR  0.9967914
4               Dog snoR  1.0000000
5             Panda  miR  0.9967914
6             Panda snoR  1.0000000
7  White_rhinoceros  miR  0.9967914
8  White_rhinoceros snoR  1.0000000
9               Cow  miR  1.0000000
10              Cow snoR  0.9925373
11            Sheep  miR  1.0000000
12            Sheep snoR  0.9925373
13       Guinea_Pig  miR  0.9775401
14       Guinea_Pig snoR  0.9776119

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM