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的两个数据帧中的所有行。
答案 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