Return TRUE/FALSE if common elements/no 向量之间的公共元素
Return TRUE/FALSE if common elements/no common elements between vectors
我正在寻找一种创建布尔向量的有效方法,如果 个指定变量中的一个或多个,则 returns TRUE
例如c(1,2,3)
在另一个向量中,例如c(4,5,6,1)
.
在此示例中,寻求的输出将是 TRUE
,因为元素 1
存在于两个向量中。
据我所知 %in%
一次只允许检查一个变量,考虑到我需要检查的潜在变量的数量,在这种情况下使用 |
运算符效率低下。使用 intersect()
returns logical(0)
而不是 FALSE
和 sum(c(1,2,3) == c(4,5,6,1)) > 1
returns FALSE
因为公共元素不在同一位置.
您可以使用 any
:
vec <- c(1,2,3)
vec2 <- c(4,5,6,1)
any(vec %in% vec2)
#[1] TRUE
另一个选项:
vector1 <- c(1,2,3)
vector2 <- c(4,5,6,1)
any(Reduce(intersect, list(vector1, vector2)))
输出:
[1] TRUE
使用 any
是最有效的方法,但只是为了提供另一种解决方案,这里是使用 sum
的方法:
!!sum(c(1,2,3) %in% c(4,5,6,1))
# [1] TRUE
或者我们可以使用 length
:
length(base::intersect(c(1,2,3), c(4,5,6,1))) != 0
这是另一个使用 is.element
和 any
的选项:
vec1 <- c(1,2,3)
vec2 <- c(4,5,6,1)
any(is.element(vec1, vec2))
# [1] TRUE
或者另一种选择是将 match
与 any
一起使用(尽管效率可能较低):
any(match(vec1, vec2), na.rm = TRUE)
还有一个
不是很好的选择:
anyDuplicated( c(unique(vec), unique(vec2)) ) > 0
# [1] TRUE
更新: 正如@M 所评论的——如果没有匹配,它会返回 TRUE!以下是如何避免这种情况:
!all(!(v1 %in% v2))
第一个回答:
另一个否定 all
:
v1 <- c(1,2,3)
v2 <- c(4,5,6,1)
!all(v1 %in% v2)
[1] TRUE
我正在寻找一种创建布尔向量的有效方法,如果 个指定变量中的一个或多个,则 returns TRUE
例如c(1,2,3)
在另一个向量中,例如c(4,5,6,1)
.
在此示例中,寻求的输出将是 TRUE
,因为元素 1
存在于两个向量中。
据我所知 %in%
一次只允许检查一个变量,考虑到我需要检查的潜在变量的数量,在这种情况下使用 |
运算符效率低下。使用 intersect()
returns logical(0)
而不是 FALSE
和 sum(c(1,2,3) == c(4,5,6,1)) > 1
returns FALSE
因为公共元素不在同一位置.
您可以使用 any
:
vec <- c(1,2,3)
vec2 <- c(4,5,6,1)
any(vec %in% vec2)
#[1] TRUE
另一个选项:
vector1 <- c(1,2,3)
vector2 <- c(4,5,6,1)
any(Reduce(intersect, list(vector1, vector2)))
输出:
[1] TRUE
使用 any
是最有效的方法,但只是为了提供另一种解决方案,这里是使用 sum
的方法:
!!sum(c(1,2,3) %in% c(4,5,6,1))
# [1] TRUE
或者我们可以使用 length
:
length(base::intersect(c(1,2,3), c(4,5,6,1))) != 0
这是另一个使用 is.element
和 any
的选项:
vec1 <- c(1,2,3)
vec2 <- c(4,5,6,1)
any(is.element(vec1, vec2))
# [1] TRUE
或者另一种选择是将 match
与 any
一起使用(尽管效率可能较低):
any(match(vec1, vec2), na.rm = TRUE)
还有一个 不是很好的选择:
anyDuplicated( c(unique(vec), unique(vec2)) ) > 0
# [1] TRUE
更新: 正如@M 所评论的——如果没有匹配,它会返回 TRUE!以下是如何避免这种情况:
!all(!(v1 %in% v2))
第一个回答:
另一个否定 all
:
v1 <- c(1,2,3)
v2 <- c(4,5,6,1)
!all(v1 %in% v2)
[1] TRUE