如何在R中移除col1重复但col2取值不同的数据行?
解决R中筛选col1分组内col2取值一致的所有行问题
核心解决方案
你需要按col1分组后,筛选出每个分组内col2唯一值数量为1的所有行,用dplyr可以这样实现:
library(dplyr) df <- data.frame(col1 = c("A", "A","A","B","B","C","D","E","F","F"), col2 = c("g1", "g1", "g1", "g2", "g3", "g1","g4","g4","g5","g6")) df_result <- df %>% group_by(col1) %>% filter(n_distinct(col2) == 1) %>% ungroup() print(df_result)
代码解释
group_by(col1):按col1的值对数据框分组filter(n_distinct(col2) == 1):筛选出每个分组里col2的唯一值数量等于1的组,也就是该col1对应的所有col2取值完全一致ungroup():取消分组,恢复普通数据框结构
验证输出
运行上述代码后,输出结果和你期望的一致:
# A tibble: 6 × 2 col1 col2 <chr> <chr> 1 A g1 2 A g1 3 A g1 4 C g1 5 D g4 6 E g4
为什么你之前的代码不符合需求
你用的distinct(col1, col2, .keep_all=TRUE)是提取每个col1-col2组合的唯一行,相当于去重保留不同组合,这和你要保留**整个分组所有行(只要该分组col2无差异)**的需求正好相反。
内容的提问来源于stack exchange,提问作者Steffi Matchado
相关产品推荐
相关产品推荐

