如何将一个数据框作为子集(完整)查找或匹配到 R 中的另一个数据框?

how find or match one data frame as a subset(full) into another data frame in R?

下面给出了两个数据框 df1 和 df2。 df1

  c1       c2   c3  c4
   B  2.34000  1.00  I
   A 14.43000  2.10  J
   D  3.45515  1.00  K
   B  2.50000  2.09   
   A  2.44000  1.10  K
   K  5.00000  1.09  L

df2 是:

  c1    c2   c3
   B  2.34  1.00
   A 14.43  2.10
   D  3.43  1.00
   B  2.50  2.09
   E  5.00  1.09
   A  2.44  1.10

这里的要求是这样的:这两个数据帧之间存在匹配(或比较)。如果 df2 完全找到(这意味着 df2 的内容与 df1 的任何子集匹配,而不管顺序 )在 df1 (与 df2 完全匹配或 df1 的子集与 df2 匹配)则输出为 true。如果不匹配则 return false

我尝试了以下方法:

1. left_join(df2,df1)
2. merge(df2,df1)
3. inner_join(df2,df1)
4. dd1[dd1$c1 %in% dd$c1,]

以上所有方法都给出了两者之间共有的数据,但没有根据要求给出结果。

请给我一些解决方案。

您可以像这样使用 matchinteraction

df1 <- read.table(text="c1       c2   c3  c4
   B  2.34000  1.00  I
   A 14.43000  2.10  J
   D  3.45515  1.00  K
   B  2.50000  2.09  NA
   A  2.44000  1.10  K
   K  5.00000  1.09  L", header=T)

df2 <- read.table(text="c1    c2   c3
   B  2.34  1.00
   A 14.43  2.10
   D  3.43  1.00
   B  2.50  2.09
   E  5.00  1.09
   A  2.44  1.10", header=T)

!any(is.na(match(interaction(df2), interaction(df1[names(df2)]))))
#[1] FALSE

#And packed in a function
"%completelyFoundIn%" <- function(x, y) {!any(is.na(match(interaction(x), interaction(y[names(x)]))))}

df2 %completelyFoundIn% df1
#[1] FALSE

df2[c(1,2,4,6),] %completelyFoundIn% df1
#[1] TRUE

df2[-5,c(1,3)] %completelyFoundIn% df1
#[1] TRUE