如何判断一个向量而不是另一个向量?

Ton*_*ark 74 r vector

在matlab中,有一种方法可以在一个向量中找到值,但在另一个向量中却找不到.

例如:

x <- c(1,2,3,4)
y <- c(2,3,4)
Run Code Online (Sandbox Code Playgroud)

是那里会告诉我,在价值的任何功能x,在不y为1?

小智 107

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

> setdiff(x, y)
[1] 1
Run Code Online (Sandbox Code Playgroud)

  • 注意:`setdiff(x,y)`和`setdiff(y,x)`是不一样的. (32认同)

Sha*_*ane 53

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

> x[!(x %in% y)]
1
Run Code Online (Sandbox Code Playgroud)

对于矩阵,有许多不同的方法. merge()可能是最直接的.我建议为这个场景看一下这个问题.


Jer*_*lim 27

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
Run Code Online (Sandbox Code Playgroud)


Wil*_*iam 6

如果:

x <- c(1,2,3,4)
y <- c(2,3,4)
Run Code Online (Sandbox Code Playgroud)

这些表达式中的任何一个:

setdiff(x, y)
x[!(x %in% y)]
x[is.na(match(x,y))]
x[!(is.element(x,y))]
Run Code Online (Sandbox Code Playgroud)

[1] 1如果目标是找到 中x不存在的值/字符,将为您提供正确的答案y

然而,应用上述表达式可能很棘手,并且可能会产生不期望的结果,具体取决于向量的性质以及表达式中 x 和 y 的位置。例如,如果:

x <- c(1,1,2,2,3,4)
y <- c(2,3,4)
Run Code Online (Sandbox Code Playgroud)

目标只是找到 中x不存在的唯一值/字符,y反之亦然。应用这些表达式中的任何一个仍然会给出正确的答案[1] 1

union(setdiff(x, y), setdiff(y, x))
Run Code Online (Sandbox Code Playgroud)

谢杰罗米·安格利姆的贡献

或者:

difference <- function(x, y) {
c(setdiff(x, y), setdiff(y, x))
}
difference(y,x)
Run Code Online (Sandbox Code Playgroud)

感谢济贫院的贡献


Wor*_*rse 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
Run Code Online (Sandbox Code Playgroud)