You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将自定义函数应用于同一DataFrame中的多个变量?

批量处理多变量并整合统计结果

修改原函数(添加变量标识与统一结构)

首先调整原函数,让它能为每个变量的统计结果添加标识,同时统一整体人群和分性别人群的输出结构:

library(tidyverse)
library(survey)

fun <- function(data, var_1) {
  # 获取变量的字符串名称
  var_name <- as_label(enquo(var_1))
  
  # 整体人群的统计结果,添加Sex="All"标记
  prop_all <- data %>%
    filter({{var_1}} >= 0) %>%
    group_by({{var_1}}) %>%
    summarise(
      Percent = round(survey_mean(vartype = "ci") * 100, 0),
      Total = unweighted(n())
    ) %>%
    mutate(
      Sex = "All",
      Variable = var_name
    )
  
  # 分性别的统计结果,添加变量名标识
  prop_sex <- data %>%
    filter({{var_1}} >= 0 & Sex >= 0) %>%
    group_by(Sex, {{var_1}}) %>%
    summarise(
      Percent = round(survey_mean(vartype = "ci") * 100, 0),
      Total = unweighted(n())
    ) %>%
    mutate(Variable = var_name)
  
  # 合并两类结果
  bind_rows(prop_all, prop_sex)
}

批量应用函数并整合结果

使用purrr::map_dfr遍历目标变量列表,自动将所有结果合并为一个DataFrame:

方式1:指定变量列表

# 定义需要处理的变量名
target_vars <- c("alc", "smoke", "exercise")  # 替换成你的实际变量名

# 批量处理并合并
final_stats <- map_dfr(target_vars, ~fun(df, !!sym(.x)))

方式2:自动筛选变量

如果需要批量处理某类变量(比如所有数值型变量,排除Sex):

# 自动筛选目标变量
target_vars <- df %>% select(where(is.numeric), -Sex) %>% colnames()

# 批量处理
final_stats <- map_dfr(target_vars, ~fun(df, !!sym(.x)))

关键修改说明

  • 添加Variable列:标记每行结果对应的原始变量,方便后续区分不同指标。
  • 统一Sex列:为整体人群的结果添加Sex="All",保证两类结果结构一致,避免绑定出错。
  • 使用{{var_1}}:替代原有的!!enquo(var_1),是tidyverse更简洁的整洁评估语法,提升代码可读性。
  • map_dfr:直接将多个函数输出的DataFrame按行绑定,无需手动处理列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 13:58:27