如何分辨一个向量而不是另一个向量?


86

在matlab中,有一种方法可以在一个向量中找到值,而在另一个向量中找不到。

例如:

x <- c(1,2,3,4)
y <- c(2,3,4)

有没有什么函数可以告诉我那个x不在的值y是1?

Answers:


122

您可以使用setdiff()(设置差异)函数:

> setdiff(x, y)
[1] 1

37
当心:setdiff(x,y)setdiff(y,x)不一样。
西安

59

是。对于矢量,您可以简单地使用%in%运算符或is.element()函数。

> x[!(x %in% y)]
1

对于矩阵,有许多不同的方法。 merge()可能是最直接的。我建议针对那种情况看这个问题




5

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

2

如果:

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的贡献

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.