使用R语言dplyr包删除符合特定条件的数据行
用dplyr批量删除符合条件的记录
核心代码实现
假设你的数据框名为df,包含year、Location、Office及其他业务列,执行以下代码即可完成需求:
library(dplyr) df_cleaned <- df %>% group_by(year, Location) %>% mutate(office_unique_count = n_distinct(Office)) %>% filter(office_unique_count == 1) %>% select(-office_unique_count) %>% ungroup()
代码逻辑说明
group_by(year, Location):按年份+Location维度分组,确保我们在指定范围内判断Office的唯一性mutate(office_unique_count = n_distinct(Office)):计算每组内不重复的Office数量,生成临时列用于筛选filter(office_unique_count == 1):仅保留组内Office唯一的记录,自动剔除所有组内存在多个不同Office的行select(-office_unique_count):(可选)删除临时生成的计数列,还原原数据结构ungroup():取消分组状态,避免后续数据操作受分组约束
效果验证
针对你提到的示例场景:
- 第1年Location为XYZ的组因包含B22、B23两个Office,整组被删除
- 第2年所有组的Office均唯一,全部保留
- 第3年Location为ABC的组因包含L17、L18两个Office,整组被删除
该方法针对10万行级别的数据性能表现稳定,dplyr的分组计算经过优化,不会出现明显卡顿。
内容的提问来源于stack exchange,提问作者jerH
相关产品推荐
相关产品推荐

