rbind具有通用ID的数据框行

时间:2018-11-17 22:22:38

标签: r

df1 <- read.table(
  text = "ID   A    B    C
    1    0    0    0
    1    1    0    1
    3    1    1    1", header = T
)

df2 <- read.table(
  text = "ID   A    B    C
    1    49   49   32
    8    2    9    3
    9    4    2    0", header = T
)

结果

ID   A    B    C
1    0    0    0
1    1    0    1
1    49   49   32

我需要制作一个由原始数据帧的所有列组成的数据帧(它们已经由相同的列组成),其中两个原始数据帧都有一些通用的ID。在此示例中,df1和df2都具有ID为1的行,因此结果数据帧中包含ID为1的两个数据帧中的所有行。

2 个答案:

答案 0 :(得分:2)

您首先使用ID获得常见的intersect,然后分别使用两个数据帧的子集和rbind-

valid_ids <- intersect(df1$ID, df2$ID)

rbind(df1[df1$ID %in% valid_ids, ], df2[df2$ID %in% valid_ids, ])

  ID  A  B  C
1  1  0  0  0
2  1  1  0  1
3  1 49 49 32

答案 1 :(得分:0)

这里是tidyverse

的一个选项
library(tidyverse)
list(df1, df2) %>% 
    bind_rows(.id = 'grp') %>% 
    group_by(ID) %>% 
    filter(n_distinct(grp) > 1) %>% 
    select(-grp)
# A tibble: 3 x 4
# Groups:   ID [1]
#     ID     A     B     C
#  <int> <int> <int> <int>
#1     1     0     0     0
#2     1     1     0     1
#3     1    49    49    32