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)
!仅适用于逻辑向量. B是不合逻辑的,这是导致错误的原因.分解您尝试制作的步骤将向您展示(即!B).在这种情况下,您要使用%in%(或match).
A[!A %in% B]
Run Code Online (Sandbox Code Playgroud)
要分解上面的代码:
A %in% B创建一个逻辑向量,TRUE用于A
存在的值B.!A %in% B 否定(逆转)(1)中的逻辑A[!A %in% B]返回TRUE(2)中元素的向量