有两个文件,数据如下:
file1
Col1 Col2
**A** 10
**B** 20
**C** 30
**D** 40
file2:
Col1 col2
**A** XYZ
**B** PQR
**B** QES
**C** UIY
**D** UUI
**D** HUI
**E** BIG
我想在col1 1上加入这两个文件,但我只想要那些只有一对一映射的条目。输出应如下所示:
文件A(我们匹配的地方)
A 10 XYZ
C 30 UIY
文件B(我们没有找到一对一的地图)
col1 col2
B 20
D 40
AS B和D在文件2中有多个条目,所以我不希望这些记录出现在我的连接结果中。
答案 0 :(得分:2)
我们可以在对第二个数据集进行子集化后使用inner_join
library(dplyr)
df2 %>%
group_by(Col1) %>%
filter(n()==1) %>%
inner_join(., df1, by = "Col1")
# Col1 col2 Col2
# <chr> <chr> <int>
#1 A XYZ 10
#2 C UIY 30
或者避免重复元素,如@ zx8754建议
res <- df2 %>%
inner_join(., df1, by = "Col1") %>%
group_by(Col1) %>%
filter(n()==1)
要获取不在&#39; res&#39;中的行,请执行anti_join
res %>%
select(Col1, Col2) %>%
anti_join(df1, .)
# Col1 Col2
#1 B 20
#2 D 40
或使用data.table
library(data.table)
na.omit(setDT(df2)[df1, Col2 := Col2[.N==1],on = "Col1", by = .EACHI])
# Col1 col2 Col2
#1: A XYZ 10
#2: C UIY 30