R 如果行名称匹配,则粘贴连接的字符串

R 如果行名称匹配,则粘贴连接的字符串,r,dataframe,gsub,R,Dataframe,Gsub,我有两个部分如下所示的数据帧: d1 及d2 taxonomy X X.1 X.2 X.3 X.4 X.5 FJ889562.1.1501 Bacteria Proteobacteria Alphaproteobacteria Rhizobial

我有两个部分如下所示的数据帧:

d1

及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中匹配的行名替换为2中相应的合并行

e、 g.如果在d2中发现FJ889562.1.1501,则应将其替换为d1中的“细菌、变形菌、α变形菌、根瘤菌、Rhodobiacea、细小杆菌、未培养细菌”

这太令人困惑了吗


感谢您的帮助。

免责声明:我不是在回答您的一般问题,而是告诉您应该如何合并数据,以便以后能够对其执行有趣的分析。将连接的分类法作为行名称没有什么意义,通常是XY问题

停止使用行名称来存储有用的信息。在data.frame中,数据应存储在列中

因此,首先,将行名称转换为实际列。这里的行名称似乎是唯一的ID:

d1$uid <- row.names(d1)
d2$uid <- row.names(d2)
这将保留d1中的所有行,但在存在匹配uid时从d2传输信息。要保留d1或d2中的所有行,请改用
full\u join

旁注:您的数据看起来没有正确加载。 首先,应该避免将任何内容作为行名加载


第二,d2的列名不正确。你为什么不给构成分类法的所有信息取个专有名称呢?您似乎想将其连接起来,但它在未连接的情况下更有用,例如,假设您想过滤“Alphaproteobacteria”,等等。

免责声明:我不是在回答您的一般问题,而是告诉您应该如何合并数据,以便以后能够对其执行有趣的分析。将连接的分类法作为行名称没有什么意义,通常是XY问题

停止使用行名称来存储有用的信息。在data.frame中,数据应存储在列中

因此,首先,将行名称转换为实际列。这里的行名称似乎是唯一的ID:

d1$uid <- row.names(d1)
d2$uid <- row.names(d2)
这将保留d1中的所有行,但在存在匹配uid时从d2传输信息。要保留d1或d2中的所有行,请改用
full\u join

旁注:您的数据看起来没有正确加载。 首先,应该避免将任何内容作为行名加载


第二,d2的列名不正确。你为什么不给构成分类法的所有信息取个专有名称呢?您似乎想将其连接起来,但它在未连接的情况下更有用,例如,假设您想过滤“Alphaproteobacteria”,等等。

您可以使用merge执行此操作,有关详细信息,请参见
?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以使用分类信息,可以使用
粘贴(…,collapse=“,”)
执行此操作,但这可能不是必需的。

您可以使用merge执行此操作,有关详细信息,请参阅
?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以使用分类信息,您可以使用
粘贴(…,collapse=“,”)
执行此操作,但这可能不是必需的。

如果您使用
dput()
将有所帮助,以便我们可以使用您的数据测试一些解决方案。为了澄清,您希望d1中的第一行名称改为“细菌、变形菌、α变形菌、根瘤菌、红景天科、小孢子菌、未培养细菌”?请问您为什么要这样做?完全按照您的意愿操作将导致难以分析的混乱数据……如果您使用
dput()
,我们可以用您的数据测试一些解决方案,这将有所帮助。为了澄清,您希望d1中的第一行名称改为“细菌、变形菌、α变形菌、根瘤菌、红景天科、小孢子菌、未培养细菌”?请问您为什么要这样做?做你想做的事情会导致混乱的数据很难分析。。。