You need to enable JavaScript to run this app. 在R中如何通过循环批量汇总多变量对应分组列的统计指标
优惠活动
大模型
产品
解决方案
定价
更多

在R中如何通过循环批量汇总多变量对应分组列的统计指标

实现代码

首先加载依赖包:

library(dplyr)
library(purrr)

步骤1:自动识别所有基础变量名

# 自动提取A/B/C/D这类核心变量名,排除ID、Status、Group_*、WOE_*类列
all_cols <- colnames(df)
base_vars <- all_cols[!all_cols %in% c("ID", "Status") & 
                        !startsWith(all_cols, "Group_") & 
                        !startsWith(all_cols, "WOE_")]

步骤2:定义单变量统计函数

calc_var_stats <- function(var_name) {
  # 生成当前变量对应的三个关联列名
  group_col <- paste0("Group_", var_name)
  woe_col <- paste0("WOE_", var_name)
  
  # 按分组列聚合计算所需统计量
  df %>%
    group_by(!!sym(group_col)) %>%
    summarise(
      "Min({var_name})" := min(!!sym(var_name), na.rm = TRUE),
      "Max({var_name})" := max(!!sym(var_name), na.rm = TRUE),
      "{woe_col}" := first(!!sym(woe_col)),
      "Count(Group_{var_name})" := n(),
      "Count_1(Group_{var_name}, where Status=1)" := sum(Status == 1, na.rm = TRUE),
      "Count_0(Group_{var_name}, where Status=0)" := sum(Status == 0, na.rm = TRUE)
    ) %>%
    rename(Group = 1) # 分组列统一重命名为Group,匹配你需要的输出格式
}

步骤3:批量处理所有变量

# 批量生成所有变量的统计结果,存储为命名列表
stats_list <- map(base_vars, calc_var_stats)
names(stats_list) <- paste0("Var ", base_vars)

# 查看指定变量的统计结果,例如查看A的结果:
print(stats_list[["Var A"]])

如果你偏好for循环实现,可替换步骤3为以下代码:

stats_list <- list()
for (var_name in base_vars) {
  group_col <- paste0("Group_", var_name)
  woe_col <- paste0("WOE_", var_name)
  
  stats_df <- df %>%
    group_by(!!sym(group_col)) %>%
    summarise(
      "Min({var_name})" := min(!!sym(var_name), na.rm = TRUE),
      "Max({var_name})" := max(!!sym(var_name), na.rm = TRUE),
      "{woe_col}" := first(!!sym(woe_col)),
      "Count(Group_{var_name})" := n(),
      "Count_1(Group_{var_name}, where Status=1)" := sum(Status == 1, na.rm = TRUE),
      "Count_0(Group_{var_name}, where Status=0)" := sum(Status == 0, na.rm = TRUE)
    ) %>%
    rename(Group = 1)
  
  stats_list[[paste0("Var ", var_name)]] <- stats_df
}

说明

  • 代码中的!!sym()是dplyr动态引用列名的标准语法,:=用于动态生成统计结果的列名
  • 同一分组下WOE值固定,因此用first()取第一个值即可,也可替换为max()/min(),结果一致
  • 最终输出的stats_list为命名列表,每个元素对应该变量的统计表格,完全符合你要求的输出格式

内容的提问来源于stack exchange,提问作者Laura Badea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 20:15:03