求对应R语言dplyr分组逻辑的Excel等效筛选方法
对应R分组筛选逻辑的Excel实现方法
需求说明
按ID分组,仅保留该组Status最小值为0的ID的所有行;若组内Status最小值不为0(比如示例中的ID2,所有Status都是1),则删除该ID的全部行。
R代码示例(可复现)
library(dplyr) n = 10 set.seed(1) ID <- c(1, 1, 1, 1, 1, 2, 2, 2, 3, 3) Status <- sample(c(0,1), n, replace = TRUE) Data <- as.data.frame(cbind(ID, Status)) # 标记分组所属阶段,最终保留Phase1对应的ID行 Data %>% group_by(ID) %>% mutate(Test = if_else(min(Status) == 0, "Phase 1", "Phase 2"))
Excel实现方法
方法1:辅助列法(适合新手)
假设数据在A列(ID)、B列(Status),数据范围为A2:B11:
- 添加辅助列(比如C列),命名为
ID_Status_Min - 在C2单元格输入数组公式:
=MIN(IF($A$2:$A$11=A2,$B$2:$B$11)),按Ctrl+Shift+Enter完成输入(Excel 365/2021及以后版本直接回车即可) - 下拉填充C列到C11,此时C列显示每个ID对应的Status最小值
- 筛选C列值等于0的行,即为需要保留的内容
方法2:Power Query法(适合大数据量)
- 选中数据区域,点击「数据」选项卡→「从表格/区域」(Excel 2016及以后版本支持),确认数据包含表头
- 在Power Query编辑器中:
- 点击「转换」选项卡→「分组依据」,分组列选择
ID,新列名设为所有行,操作选择「所有行」 - 添加自定义列,公式输入:
=List.Min([所有行][Status]),命名为Status_Min - 筛选
Status_Min列等于0的行 - 点击「所有行」列右侧的展开按钮,选择展开所有列
- 点击「关闭并上载」,将处理后的数据加载回Excel
- 点击「转换」选项卡→「分组依据」,分组列选择
内容的提问来源于stack exchange,提问作者carphunter
相关产品推荐
相关产品推荐

