在matlab中,有一种方法可以在一个向量中找到值,但在另一个向量中却找不到。
例如:
x <- c(1,2,3,4)
y <- c(2,3,4)
是否有任何函数可以告诉我x
中不在y
的值是1?
答案 0 :(得分:101)
你可以使用setdiff()(设置差异)函数:
> setdiff(x, y)
[1] 1
答案 1 :(得分:52)
是。对于矢量,您只需使用%in%
运算符或is.element()
函数。
> x[!(x %in% y)]
1
对于矩阵,有许多不同的方法。 merge()
可能是最直接的。我建议looking at this question for that scenario。
答案 2 :(得分:25)
R中setdiff, union, intersect, setequal, and is.element的帮助文件提供了有关R中标准集函数的信息。
setdiff(x, y)
会返回不在x
中的y
元素。
如上所述,这是一种不对称的差异。 例如:
> x <- c(1,2,3,4)
> y <- c(2,3,4,5)
>
> setdiff(x, y)
[1] 1
> setdiff(y, x)
[1] 5
> union(setdiff(x, y), setdiff(y, x))
[1] 1 5
答案 3 :(得分:12)
x[is.na(match(x,y))]
答案 4 :(得分:4)
setdiff()
是一个棘手的函数,因为输出取决于输入的顺序。您可以改写一个简单的函数,使其与intersect
完全相反。这样好多了。
>difference <- function(x, y) {
c(setdiff(x, y), setdiff(y, x))
}
#Now lets test it.
>x <- c(1,2,3,4)
>y <- c(2,3,4,5)
>difference(x,y)
[1] 1 5
答案 5 :(得分:1)
如果:
x <- c(1,2,3,4)
y <- c(2,3,4)
以下任何一种表达方式:
setdiff(x, y)
x[!(x %in% y)]
x[is.na(match(x,y))]
x[!(is.element(x,y))]
如果目标是要找到[1] 1
中没有的值/字符,那么将为您提供正确的答案x
。
但是,根据向量的性质以及表达式中x和y的位置,应用上述表达式可能会很棘手,并且可能会产生不希望的结果。例如,如果:
y
,目标只是在x <- c(1,1,2,2,3,4)
y <- c(2,3,4)
中找到唯一的值/字符,而在x
中不存在,反之亦然。应用这些表达式中的任何一个仍将给出正确的答案y
:
[1] 1
OR:
union(setdiff(x, y), setdiff(y, x))