我有两个数据框,部分看起来像这样:
D1
SRR1686681 SRR1686679 SRR1686680 SRR1686686 ERR1014349 ERR1014347
FJ889562.1.1501 0 0 0 0 0 0
JQ236848.1.1432 1 0 1 0 0 0
EU431805.1.1493 0 0 0 0 0 0
EU537467.1.1392 1 0 0 0 10 0
JF500179.1.1495 0 0 0 0 0 0
HM128723.1.1454 0 0 0 0 0 0
和d2
taxonomy X X.1 X.2 X.3 X.4 X.5
FJ889562.1.1501 Bacteria Proteobacteria Alphaproteobacteria Rhizobiales Rhodobiaceae Parvibaculum uncultured bacterium
JQ236848.1.1432 Bacteria Proteobacteria Betaproteobacteria Burkholderiales Comamonadaceae Variovorax uncultured bacterium
EU431805.1.1493 Bacteria Proteobacteria Alphaproteobacteria Rhizobiales Rhizobiaceae Rhizobium Agrobacterium sp. BKBLPu14
EU537467.1.1392 Bacteria Proteobacteria Betaproteobacteria Rhodocyclales Rhodocyclaceae Azoarcus bacterium SL4.29
JF500179.1.1495 Bacteria Proteobacteria Alphaproteobacteria Sphingomonadales Sphingomonadaceae Novosphingobium uncultured alpha proteobacterium
HM128723.1.1454 Bacteria Proteobacteria Betaproteobacteria Burkholderiales Comamonadaceae Variovorax Variovorax sp. SOD31
我想将d1中匹配的rownames替换为2中相应的合并行。
e.g。如果在d2中发现FJ889562.1.1501,那么它应该被"细菌,变形菌,Alphaproteobacteria,Rhizobiales,Rhodobiaceae,Parvibaculum,未培养的细菌"在d1。
这太混乱了吗?
感谢您的帮助。
答案 0 :(得分:2)
免责声明:我没有回答您的问题,但是告诉您应该如何合并数据并在以后对其进行有趣的分析。将连续分类法作为行名称使用起来很有意义,通常是XY问题!
停止使用行名来存储有用的信息。在data.frame中,数据应存储在列中。
首先,将您的行名称转换为实际列。这里的行名称似乎是唯一的ID:
d1$uid <- row.names(d1)
d2$uid <- row.names(d2)
现在,在我看来,您的最终目标是将所有信息都放在一个data.frame中。所以你想要做的就是加入data.frames。有很多方法可以做到这一点,我个人喜欢包dplyr
的语法。基本R函数为merge
。
library("dplyr")
fused_d <- left_join(d1, d2, by="uid")
这会将所有行保留在d1中,但在匹配的uid时从d2传输信息。要将所有行保留在d1或d2中,请改用full_join
。
旁注:您的数据看起来没有正确加载。 首先,你应该避免加载任何行名称。
其次,d2的列名不正确。你为什么不给构成分类法的所有信息都说出正确的名字?你似乎想要连接它,但它更加有用,例如想象你想要过滤“Alphaproteobacteria”等。
答案 1 :(得分:0)
您可以使用合并执行此操作,有关详细信息,请参阅?merge
:
> merge(d1, d2, by="row.names")
Row.names SRR1686681 SRR1686679 SRR1686680 SRR1686686 ERR1014349 ERR1014347
1 EU431805.1.1493 0 0 0 0 0 0
2 EU537467.1.1392 1 0 0 0 10 0
3 FJ889562.1.1501 0 0 0 0 0 0
4 HM128723.1.1454 0 0 0 0 0 0
5 JF500179.1.1495 0 0 0 0 0 0
6 JQ236848.1.1432 1 0 1 0 0 0
taxonomy X X.1 X.2 X.3
1 Bacteria Proteobacteria Alphaproteobacteria Rhizobiales Rhizobiaceae
2 Bacteria Proteobacteria Betaproteobacteria Rhodocyclales Rhodocyclaceae
3 Bacteria Proteobacteria Alphaproteobacteria Rhizobiales Rhodobiaceae
4 Bacteria Proteobacteria Betaproteobacteria Burkholderiales Comamonadaceae
5 Bacteria Proteobacteria Alphaproteobacteria Sphingomonadales Sphingomonadaceae
6 Bacteria Proteobacteria Betaproteobacteria Burkholderiales Comamonadaceae
X.4 X.5
1 Rhizobium Agrobacterium_sp._BKBLPu14
2 Azoarcus bacterium_SL4.29
3 Parvibaculum uncultured_bacterium
4 Variovorax Variovorax_sp._SOD31
5 Novosphingobium uncultured_alpha_proteobacterium
6 Variovorax uncultured_bacterium
如果您仍想更改row.names以使用分类信息,可以使用paste(..., collapse=", ")
从那里开始,但可能没有必要。