如何在不拼接拆分的情况下去除多个向量间的全部重复元素?
问题:移除多向量间的全部重复元素(完全剔除重复项)
需要移除多个向量中所有出现过不止一次的元素——只要某个元素在任意两个及以上向量里出现,就把它从所有包含它的向量里彻底删掉。示例如下:
输入代码:
a <- c("dog", "fish", "cow") b <- c("dog", "horse", "mouse") c <- c("cat", "sheep", "mouse")
期望输出:
a <- c("fish", "cow") b <- c("horse") c <- c("cat", "sheep")
核心疑问:能否在不拼接向量再拆分的前提下实现这个需求?
解决方案
当然可以,不用拼接拆分也能搞定,具体实现步骤如下:
- 把所有目标向量存入一个列表,方便统一统计元素出现次数
- 统计所有元素在跨向量中的总出现频次
- 筛选出仅出现过一次的元素
- 用这些唯一元素分别过滤原向量
对应R代码:
# 将目标向量存入列表 vec_list <- list(a = a, b = b, c = c) # 统计所有元素的跨向量出现频次 element_counts <- table(unlist(vec_list)) # 找出仅出现一次的元素 unique_elements <- names(element_counts[element_counts == 1]) # 逐个过滤原向量 a <- vec_list$a[vec_list$a %in% unique_elements] b <- vec_list$b[vec_list$b %in% unique_elements] c <- vec_list$c[vec_list$c %in% unique_elements] # 验证结果 a #> [1] "fish" "cow" b #> [1] "horse" c #> [1] "cat" "sheep"
这里全程没有把向量拼接后再拆分回原结构,只是通过列表做统一统计,再分别对原向量做筛选,完全符合要求。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

