0

我有 2 个数据框 df1 和 df2,我想检查 df2 中是否有任何行的值与 df1 中 4 列的值相同?

               df1 

                    a1    a2.    a3     a4
                    1      2      3     4
                    1      2      3     5
                    1      6      3     3
                    1      2      8     4


               df2 

                    a1    a2.    a3     a4
                    1      2      3     9
                    4      2      8     5
                    1      6      3     7
                    5      2      8     2

假设我想在 df2 中选择在 a1 、 a2 和 a3 中的 df1 中具有相同值的行:

输出

                    a1    a2.    a3     a4
                    1      2      3     9
                    1      6      3     7
4

2 回答 2

2

使用dplyr,我们可以a4从中取消选择列df1,执行inner_join,然后使用distinct_all()删除重复行。

library(dplyr)


df2 %>% 
  inner_join(select(df1, -a4)) %>% 
  distinct_all()

  a1 a2. a3 a4
1  1   2  3  9
2  1   6  3  7

或与base R

unique(merge(df1[,-4], df2))

或者:

unique(merge(subset(df1, select = -a4), df2))
于 2019-09-20T06:41:09.367 回答
0

使用基础 R,我们可以paste为数据帧逐行列出感兴趣的列,并选择df2匹配的行。

cols <- paste0("a", 1:3)

df2[do.call(paste, c(df2[cols], sep = "-")) %in% 
       do.call(paste, c(df1[cols], sep = "-")), ]

#  a1 a2 a3 a4
#1  1  2  3  9
#3  1  6  3  7
于 2019-09-20T06:45:02.173 回答