一人加入R
有两个文件,数据如下所示:一人加入R,r,R,有两个文件,数据如下所示: 文件1 文件2: Col1 col2 **A** XYZ **B** PQR **B** QES **C** UIY **D** UUI **D** HUI **E** BIG 我想在col1上连接这两个文件,但我只想要那些只有一对一映射的条目。输出应如下所示: 文件A(我们有匹配项的地方) A10 XYZ C30 UIY 文件B(我们没有找到一对一映射) col1 col2 B20 D 40 由于
文件1 文件2:
Col1 col2
**A** XYZ
**B** PQR
**B** QES
**C** UIY
**D** UUI
**D** HUI
**E** BIG
我想在col1上连接这两个文件,但我只想要那些只有一对一映射的条目。输出应如下所示:文件A(我们有匹配项的地方)
A10 XYZ
C30 UIY 文件B(我们没有找到一对一映射) col1 col2
B20
D 40
由于B和D在文件2中有多个条目,因此我不希望这些记录出现在我的联接结果中。在对第二个数据集进行子集设置后,我们可以使用
内部联接
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
或使用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
我会在连接后添加过滤器,以防df1有重复的值。我现在得到了一个匹配的值,我想分离那些在df2中没有匹配的值,因此将有两个文件:一个是有匹配的文件,另一个是没有匹配的文件。我会在我的测试数据集上测试你的方法,非常感谢@HimangSoukaLa:这是基于你的例子,它是为这一点而努力的。@ HimangSoukaLa如果是一个新的问题,请考虑把它作为一个新的问题。它不是一个新问题,它只是对以前的合并后的帖子的扩展:
res <- df2 %>%
inner_join(., df1, by = "Col1") %>%
group_by(Col1) %>%
filter(n()==1)
res %>%
select(Col1, Col2) %>%
anti_join(df1, .)
# Col1 Col2
#1 B 20
#2 D 40
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