在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)
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)
如果:
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)
感谢济贫院的贡献
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)