查找不在较小字符向量列表中但在大列表中的元素

jon*_*jon 7 r list character subset

我有两个大小的名单.我想知道大列表中的哪些元素不在较小的列表中.该清单包括财产

([1] "character"           "vector"              "data.frameRowLabels"
[4] "SuperClassMethod"
Run Code Online (Sandbox Code Playgroud)

这是我得到的小例子和错误

 A <- c("A", "B", "C", "D")
 B <- c("A", "B", "C")
  new <- A[!B]
Error in !B : invalid argument type
Run Code Online (Sandbox Code Playgroud)

预期的输出是新的< - c("D")

Ben*_*nes 12

看一下help("%in%")- 该页面底部有一个解决这种情况的例子.

A <- c("A", "B", "C", "D")
B <- c("A", "B", "C")
(new <- A[which(!A %in% B)])

# [1] "D"
Run Code Online (Sandbox Code Playgroud)

编辑:

正如泰勒指出的那样,我应该听取自己的建议并阅读支持文件.which()%in%这个例子中使用时是不必要的.所以,

(new <- A[!A %in% B])

# [1] "D"
Run Code Online (Sandbox Code Playgroud)


Jos*_*ich 5

!仅适用于逻辑向量. B是不合逻辑的,这是导致错误的原因.分解您尝试制作的步骤将向您展示(即!B).在这种情况下,您要使用%in%(或match).

A[!A %in% B]
Run Code Online (Sandbox Code Playgroud)

要分解上面的代码:

  1. A %in% B创建一个逻辑向量,TRUE用于A 存在的值B.
  2. !A %in% B 否定(逆转)(1)中的逻辑
  3. A[!A %in% B]返回TRUE(2)中元素的向量