如何按组计算DT06系列变量的条件均值并生成统计表格?
解决方案
要实现按insuff_suff_res_cat分组,计算指定DT06变量的均值(仅纳入对应DT01变量为1的样本),可以结合dplyr和purrr高效处理变量对的条件筛选与分组统计,具体实现如下:
步骤1:定义目标变量列表
先明确需要计算的DT06变量及其对应的DT01筛选变量:
# 定义需计算均值的DT06变量 dt06_vars <- c(paste0("DT06_", 1:3), "DT06_7", paste0("DT06_", 10:19)) # 生成对应的DT01筛选变量(替换DT06为DT01) dt01_vars <- gsub("DT06", "DT01", dt06_vars)
步骤2:批量计算分组均值
通过map2遍历每对DT01/DT06变量,完成条件筛选、分组统计后合并结果:
library(dplyr) library(purrr) library(tibble) # 假设你的数据集名为df grouped_mean_table <- map2(dt01_vars, dt06_vars, ~{ df %>% # 仅保留对应DT01变量为1的样本 filter(.data[[.x]] == 1) %>% # 按分组变量分组 group_by(insuff_suff_res_cat) %>% # 计算DT06变量的均值,忽略缺失值 summarize(!!.y := mean(.data[[.y]], na.rm = TRUE)) }) %>% # 合并所有变量的统计结果,保留所有分组(适配部分参与者无全部分组数据的情况) reduce(full_join, by = "insuff_suff_res_cat") %>% # 调整列顺序:分组列在前,DT06变量按定义顺序排列 select(insuff_suff_res_cat, all_of(dt06_vars))
代码说明
.data[[.x]]和.data[[.y]]用于动态引用变量,避免硬编码;!!.y用于将DT06变量名作为列名保留在结果中;full_join确保所有存在数据的分组都被保留,不会因部分变量无某分组数据而丢失;na.rm = TRUE处理样本中的缺失值,保证均值计算的有效性。
运行上述代码后,grouped_mean_table就是你需要的统计表格,每行对应一个insuff_suff_res_cat分组,每列对应一个DT06变量的均值。
内容的提问来源于stack exchange,提问作者Nadine M.
相关产品推荐
相关产品推荐

