📅  最后修改于: 2023-12-03 15:08:14.561000             🧑  作者: Mango
有时候,在 R 中我们需要从多个向量中找到公共元素。本文将介绍几种简单的方法来实现这个任务。
intersect
函数可以找到两个向量中的公共元素,我们可以使用 Reduce
函数来在多个向量中应用它。
v1 <- c(1, 2, 3, 4, 5)
v2 <- c(3, 4, 5, 6, 7)
v3 <- c(5, 6, 7, 8, 9)
common_elements <- Reduce(intersect, list(v1, v2, v3))
print(common_elements)
输出结果为:
[1] 5
这里我们将需要找到的向量放在一个列表里,然后使用 Reduce
函数和 intersect
函数来找到它们的公共元素。
这个方法非常简单,我们只需要使用 %in%
操作符和 all
函数来判断一个元素是否出现在所有的向量中。
v1 <- c(1, 2, 3, 4, 5)
v2 <- c(3, 4, 5, 6, 7)
v3 <- c(5, 6, 7, 8, 9)
common_elements <- NULL
for (element in v1) {
if (element %in% v2 && element %in% v3) {
common_elements <- c(common_elements, element)
}
}
print(common_elements)
输出结果为:
[1] 5
这个方法使用了一个 for
循环来遍历 v1
中的元素,然后使用 %in%
操作符和 all
函数来判断这个元素是否同时出现在 v2
和 v3
中。如果出现了,我们就把这个元素添加到一个新的向量中。
我们可以使用 setdiff
函数来寻找一个在其他所有向量中都未出现的元素。使用这个函数,我们可以找到所有向量的交集,然后逐个移除不属于交集的元素。
v1 <- c(1, 2, 3, 4, 5)
v2 <- c(3, 4, 5, 6, 7)
v3 <- c(5, 6, 7, 8, 9)
common_elements <- Reduce(intersect, list(v1, v2, v3))
for (vector in list(v1, v2, v3)) {
common_elements <- intersect(common_elements, vector)
}
print(common_elements)
输出结果为:
[1] 5
这个方法首先使用 intersect
函数找到所有向量的交集,然后逐个移除不属于交集的元素,使得最终得到的向量包含所有的公共元素。
我们可以将这些方法封装成一个函数,方便在其他程序中使用:
find_common_elements <- function(vectors) {
common_elements <- Reduce(intersect, vectors)
for (vector in vectors) {
common_elements <- intersect(common_elements, vector)
}
return(common_elements)
}
v1 <- c(1, 2, 3, 4, 5)
v2 <- c(3, 4, 5, 6, 7)
v3 <- c(5, 6, 7, 8, 9)
common_elements <- find_common_elements(list(v1, v2, v3))
print(common_elements)
输出结果为:
[1] 5
现在你已经学会了几种不同的方法来从 R 中的多个向量中找到公共元素。使用这些方法,你可以在你的程序中更加高效地操作向量。