📜  如何从 R 中的多个向量中找到公共元素?(1)

📅  最后修改于: 2023-12-03 15:08:14.561000             🧑  作者: Mango

如何从 R 中的多个向量中找到公共元素?

有时候,在 R 中我们需要从多个向量中找到公共元素。本文将介绍几种简单的方法来实现这个任务。

方法一: intersect

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

这个方法非常简单,我们只需要使用 %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 函数来判断这个元素是否同时出现在 v2v3 中。如果出现了,我们就把这个元素添加到一个新的向量中。

方法三: 集合运算

我们可以使用 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 中的多个向量中找到公共元素。使用这些方法,你可以在你的程序中更加高效地操作向量。