检查一个数据框的列中的值是否存在于另一个数据框中。

49

我有两个数据框(A和B),它们都有一个名为“C”的列。 我想检查数据帧A中“C”列中的值是否存在于数据帧B中。

A = data.frame(C = c(1,2,3,4))
B = data.frame(C = c(1,3,4,7))

2
setdiff 可能会引起兴趣。 - James
1个回答

115

使用%in%的示例如下

A$C %in% B$C

这将告诉您A表中列C的哪些值在B表中。

返回的是逻辑向量。在您的示例特定情况下,返回结果如下:

A$C %in% B$C
# [1]  TRUE FALSE  TRUE  TRUE

你可以将它用作A的行索引,或者将其用作A$C的索引以获取实际值:

# as a row index
A[A$C %in% B$C,  ]  # note the comma to indicate we are indexing rows

# as an index to A$C
A$C[A$C %in% B$C]
[1] 1 3 4  # returns all values of A$C that are in B$C
我们也可以对它取反:
A$C[!A$C %in% B$C]
[1] 2   # returns all values of A$C that are NOT in B$C



如果您想知道特定值是否在B$C中,请使用相同的函数:

  2 %in% B$C   # "is the value 2 in B$C ?"  
  # FALSE

  A$C[2] %in% B$C  # "is the 2nd element of A$C in B$C ?"  
  # FALSE

最后一个表达式会告诉你A $ C中的第二个值是否在B $ C中。 - IRTFM
1
是的,绝对没错。在原始示例中,A$C[2]2,因此缺乏清晰度。我编辑了我的示例中的注释,希望能够澄清。 - Ricardo Saporta
1
这真的很有用;我们如何扩展此技术以在给定变量中搜索字符串?我们可以与 str_detect 结合使用吗? - Ben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接