R语言如何提取数据框中存在重复学校的所有对应记录
R筛选在校生人数≥2的学校对应行的解决方案
你现有的duplicated()返回的向量仅会标记第二次及之后出现的重复学校条目,第一次出现的重复学校会被标记为FALSE,所以不能直接用这个向量筛选,以下是两种可行方案:
基础R实现
实现1:基于频数统计筛选
先统计每个学校的出现次数,筛选出次数≥2的学校,再匹配原数据保留对应行:
# 统计各学校人数,筛选人数≥2的学校 valid_schools <- names(which(table(school_color_list$学校) >= 2)) # 筛选对应行 result_df <- school_color_list[school_color_list$学校 %in% valid_schools, ]
实现2:基于duplicated逻辑调整
结合正序、倒序两次duplicated结果,标记所有出现过重复的学校对应的行:
# 标记所有属于重复学校的行 all_dup_school_rows <- duplicated(school_color_list$学校) | duplicated(school_color_list$学校, fromLast = TRUE) # 筛选对应行 result_df <- school_color_list[all_dup_school_rows, ]
dplyr实现(可读性更高)
library(dplyr) result_df <- school_color_list %>% group_by(学校) %>% # 按学校分组 filter(n() >= 2) %>% # 保留组内行数≥2的所有行 ungroup() # 可选,解除分组方便后续处理
以上方案运行后,你的示例数据返回结果如下:
| 姓名 | 学校 | 最喜欢的颜色 |
|---|---|---|
| Joey | Michigan | Blue |
| Tina | BC | Gold |
| John | BC | Red |
| Shaun | Michigan | Teal |
内容的提问来源于stack exchange,提问作者trog12
相关产品推荐
相关产品推荐

