如何筛选向量中重复次数不为指定次数的元素
如何筛选向量中重复次数不为指定次数的元素
嘿,这个问题很常见,我来给你几种简洁的解决方法:
方法一:基础R实现(无需额外包)
首先我们可以用table()函数统计向量中每个元素的出现频次,接着筛选出频次不等于2的元素值,最后从原向量中提取这些元素:
v <- c(1,2,2,3,3,3,4,4) # 统计每个元素的出现次数 freq_table <- table(v) # 筛选出出现次数不等于2的元素值 target_elements <- names(freq_table)[freq_table != 2] # 从原向量中提取所有符合条件的元素实例 result <- v[v %in% target_elements] # 查看结果 result # 输出:[1] 1 3 3 3
如果只需要获取唯一的符合条件的元素值(而不是所有实例),直接用as.numeric(target_elements)即可,结果会是[1] 1 3。
方法二:使用tidyverse/dplyr包(更直观的语法)
如果你习惯用tidyverse系列工具,用dplyr可以写出可读性更强的代码:
library(dplyr) v <- c(1,2,2,3,3,3,4,4) # 获取唯一的符合条件的元素值 unique_targets <- tibble(value = v) %>% count(value) %>% filter(n != 2) %>% pull(value) # 获取原向量中所有符合条件的元素实例 all_instances <- tibble(value = v) %>% group_by(value) %>% mutate(count = n()) %>% filter(count != 2) %>% pull(value)
运行后unique_targets会得到[1] 1 3,all_instances会得到[1] 1 3 3 3。
备注:内容来源于stack exchange,提问作者jo_
相关产品推荐
相关产品推荐

