如何获取R语言多个向量中至少在两个向量出现的公共值
R实现提取至少在2个向量中出现的公共值
核心思路
统计每个唯一值所属的不同向量的数量,筛选出数量≥2的值即可,方法支持任意数量的输入向量,无需提前固定向量个数。
基础R实现(无需额外安装包)
首先是示例向量定义:
x <- c(1,3,5,7,9) y <- c(3,6,8,9,4) z <- c(2,3,4,5,7,9) # 将所有待比对的向量存入列表,可随意增减向量数量 vec_list <- list(x, y, z)
核心处理代码:
# 统计每个值出现在多少个不同的向量中 value_freq <- table(unlist(lapply(vec_list, unique))) # 筛选至少在2个向量中出现的值 res <- sort(as.numeric(names(value_freq[value_freq >= 2]))) print(res)
运行输出:
[1] 3 4 5 7 9
代码说明
- 对每个向量先调用
unique:避免同一个向量内的重复值被重复计数,保证统计的是出现的向量个数,不是值的总出现次数 - 若输入向量为字符类型,将
as.numeric替换为as.character即可 - 若需要调整出现次数阈值,比如要求至少出现在3个向量中,只需将
value_freq >= 2中的2修改为对应阈值即可
tidyverse风格实现(适用于已加载tidyverse环境的场景)
library(purrr) library(dplyr) res <- vec_list %>% map(unique) %>% flatten_int() %>% tibble(value = .) %>% count(value) %>% filter(n >= 2) %>% pull(value) %>% sort()
内容的提问来源于stack exchange,提问作者Forge
相关产品推荐
相关产品推荐

