将R中的数据帧与rownames中的重复值合并

时间:2018-05-11 14:55:40

标签: r

我尝试使用与this帖子完全相同的rbind函数。

我有3个数据帧,有2列(rownames和" source")。

在第一个和第二个数据帧之间有2个rownames重复值,在第一个和第三个数据帧之间有一个。

TMCS09g1008676 fleshy TMCS09g1008677 fleshy TMCS09g1008678 fleshy TMCS09g1008679 fleshy TMCS09g1008680 fleshy TMCS09g1008681 fleshy TMCS09g1008682 fleshy TMCS09g1008683 fleshy

B'/ P>

TMCS09g1008684 rotten TMCS09g1008685 rotten TMCS09g1008686 rotten TMCS09g1008682 rotten TMCS09g1008688 rotten TMCS09g1008689 rotten TMCS09g1008690 rotten TMCS09g1008691 rotten TMCS09g1008683 rotten TMCS09g1008693 rotten

C

TMCS09g1008695 good TMCS09g1008696 good TMCS09g1008697 good TMCS09g1008698 good TMCS09g1008683 good TMCS09g1008700 good TMCS09g1008701 good TMCS09g1008702 good TMCS09g1008703 good TMCS09g1008704 good TMCS09g1008705 good

在应用该帖子中建议的功能后:

duprows <- which(!is.na(match(rownames(a),rownames(b)))) rbind(a, b[-duprows,])

我得到了这个:
> rbind(a, b[-duprows,]) source TMCS09g1008677 fleshy TMCS09g1008678 fleshy TMCS09g1008679 fleshy TMCS09g1008680 fleshy TMCS09g1008681 fleshy TMCS09g1008682 fleshy TMCS09g1008683 fleshy 8 <NA> Warning message: In并[d - 因子( TMP , ri, value = 1L) : invalid factor level, NA generated

主要的是我想保留数据框的第二列&#34; a&#34;对于重复的值。我多么清楚。
提前致谢

1 个答案:

答案 0 :(得分:0)

您如何看待这一点。

样本数据(您的数据 - 可重现;)):

require(tidyverse)

a <- data.frame(ID = c("TMCS09g1008676",
          "TMCS09g1008677",
          "TMCS09g1008678",
          "TMCS09g1008679",
          "TMCS09g1008680" ,
          "TMCS09g1008681",
          "TMCS09g1008682",
          "TMCS09g1008683"), Staus = rep("fleshy"))

b <- data.frame(ID = c( "TMCS09g1008684" ,
                        "TMCS09g1008685" ,
                        "TMCS09g1008686" ,
                        "TMCS09g1008682"  ,
                        "TMCS09g1008688" ,
                        "TMCS09g1008689" ,
                        "TMCS09g1008690" ,
                        "TMCS09g1008691",
                        "TMCS09g1008683" ,
                        "TMCS09g1008693"), Staus = rep("rotten"))

c <- data.frame(ID = c( "TMCS09g1008695" ,
                        "TMCS09g1008696"  ,
                        "TMCS09g1008697" ,
                        "TMCS09g1008698"  ,
                        "TMCS09g1008683"  ,
                        "TMCS09g1008700" ,
                        "TMCS09g1008701"  ,
                        "TMCS09g1008702" ,
                        "TMCS09g1008703"  ,
                        "TMCS09g1008704" ,
                        "TMCS09g1008705" ), Staus = rep("good"))

您可以使用plyr::join_all进行匹配。由于您具有重复的ID,因此将强制它打开新列以适合重复的值。

plyr::join_all(list(a,b,c), by = "ID")

结果:

              ID  Staus  Staus Staus
1 TMCS09g1008676 fleshy   <NA>  <NA>
2 TMCS09g1008677 fleshy   <NA>  <NA>
3 TMCS09g1008678 fleshy   <NA>  <NA>
4 TMCS09g1008679 fleshy   <NA>  <NA>
5 TMCS09g1008680 fleshy   <NA>  <NA>
6 TMCS09g1008681 fleshy   <NA>  <NA>
7 TMCS09g1008682 fleshy rotten  <NA>
8 TMCS09g1008683 fleshy rotten  good