如何基于分组行数对分组变量执行条件过滤(R语言)
R语言分组过滤数据解决方案
没问题,这就帮你搞定这个分组过滤的需求!我们可以借助dplyr包来轻松实现,逻辑清晰易懂,先看完整代码:
# 先安装并加载dplyr包(如果还没安装的话) if (!require(dplyr)) { install.packages("dplyr") library(dplyr) } # 构造你提供的样本数据 df <- structure(list(ACH_DATE = c("31OCT2018", "31JAN2019", "31OCT2018", "31JAN2019", "31OCT2018", "31JAN2019"), CODE = c("A81001", "A81001", "A81002", "A81002", "A81003", "A81004")), row.names = c(NA, 6L ), class = "data.frame") # 核心的分组过滤操作 df_processed <- df %>% group_by(CODE) %>% filter(!(n() > 1 & ACH_DATE == "31OCT2018")) %>% ungroup() # 查看处理后的结果 print(df_processed)
代码逻辑解释
- 分组:用
group_by(CODE)把数据按CODE字段分组,相同CODE的行会被归为一组; - 条件过滤:
filter()里的!(n() > 1 & ACH_DATE == "31OCT2018")是关键:n()会返回当前分组的行数;- 整个条件的意思是:保留那些不满足「分组行数>1 且 ACH_DATE等于31OCT2018」的行。也就是说,只有当某个分组有超过1行数据时,我们才移除其中ACH_DATE为"31OCT2018"的行;如果分组只有1行(比如A81003、A81004),则直接保留该行;
- 取消分组:最后用
ungroup()把分组后的 tibble 转回普通数据框,方便后续操作。
处理后的数据结果
运行代码后,你会得到如下结果:
# A tibble: 4 × 2 ACH_DATE CODE <chr> <chr> 1 31JAN2019 A81001 2 31JAN2019 A81002 3 31OCT2018 A81003 4 31JAN2019 A81004
内容的提问来源于stack exchange,提问作者Nautica
相关产品推荐
相关产品推荐

