我想知道一个向量中没有找到的确切元素。例如,考虑以下向量:
veca <- c("ab", "cd", "ef", "gh", "ij", "kl") vecb <- c("ab", "ef", "ij", "kl")
由此可见,cd和gh在veca中,但不在vecb中。如何在R中识别这些元素?谢谢!
cd
gh
veca
vecb
tnkciper1#
我们可以使用setdiff定义一个自定义函数,比如一个相反的intersect函数:学习here:
setdiff
outersect <- function(x, y) { sort(c(setdiff(x, y), setdiff(y, x))) } outersect(veca, vecb)
输出:
[1] "cd" "gh"
另一种可能的解决方案是:
not_in_vecb <- veca[!veca %in% vecb] [1] "cd" "gh"
czfnxgou2#
您可以使用内置函数setdiff()示例:
setdiff()
veca <- c("ab", "cd", "ef", "gh", "ij", "kl") vecb <- c("ab", "ef", "ij", "kl") print(setdiff(veca, vecb))
vnzz0bqm3#
可以使用%in%运算符标识veca中不存在于vecb中的元素
%in%
> veca[!(veca %in% vecb)] [1] "cd" "gh"
sc4hvdpw4#
这里我们考虑一个更一般的情况
veca <- c("ab", "cd", "ef", "gh", "ij", "kl") # "cd" and "gh" are not in `vecb` vecb <- c("ab", "ef", "ij", "kl", "xy") # "xy" is not in `veca`
下面是我们可以尝试的一些选项
set
union
intersect
> setdiff(union(veca, vecb), intersect(veca, vecb)) [1] "cd" "gh" "xy"
stack
subset
1
subset( aggregate( ind ~ ., stack(list(a = veca, b = vecb)), unique ), lengths(ind) == 1, select = values )
它给出了
values 2 cd 4 gh 7 xy
4条答案
按热度按时间tnkciper1#
我们可以使用
setdiff
定义一个自定义函数,比如一个相反的intersect函数:学习here:
输出:
另一种可能的解决方案是:
czfnxgou2#
您可以使用内置函数
setdiff()
示例:
输出:
vnzz0bqm3#
可以使用
%in%
运算符标识
veca
中不存在于vecb
中的元素sc4hvdpw4#
这里我们考虑一个更一般的情况
下面是我们可以尝试的一些选项
set
操作:union
、setdiff
和intersect
stack
+subset
,过滤出仅出现1
的对象它给出了