在matlab中,有一种方法可以在一个向量中找到值,而在另一个向量中找不到。
例如:
x <- c(1,2,3,4)
y <- c(2,3,4)
有没有什么函数可以告诉我那个x
不在的值y
是1?
Answers:
是。对于矢量,您可以简单地使用%in%
运算符或is.element()
函数。
> x[!(x %in% y)]
1
对于矩阵,有许多不同的方法。 merge()
可能是最直接的。我建议针对那种情况看这个问题。
R中关于setdiff,union,intersect,setequal和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
如果:
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
,它将为您提供正确的答案y
。
但是,根据载体的性质以及表达式中x和y的位置,应用上述表达式可能会比较棘手,并且可能会产生不希望的结果。例如,如果:
x <- c(1,1,2,2,3,4)
y <- c(2,3,4)
而目标只是在中找到唯一的值/字符x
,而在中则不存在,y
反之亦然。应用这些表达式中的任何一个仍将给出正确的答案[1] 1
:
union(setdiff(x, y), setdiff(y, x))
感谢Jeromy Anglim的贡献
要么:
difference <- function(x, y) {
c(setdiff(x, y), setdiff(y, x))
}
difference(y,x)
感谢Workhouse的贡献
setdiff(x,y)
和setdiff(y,x)
不一样。