R语言如何基于分桶健康对照的均值标准差生成患者标准化评分
实现代码
你已经完成了分桶和健康人群统计值计算的前置步骤,直接用purrr::pmap遍历三个对应分桶的列表,结合dplyr的列操作即可实现需求:
第一步:先指定需要标准化的指标列
# 按需调整要做标准化的列名即可 cols_to_scale <- c("age", "length")
第二步:遍历分桶批量计算标准化值
library(purrr) library(dplyr) # 先校验三个列表的分桶顺序一致,避免对应错误(如果列表已按bucket命名可以加这一步) allpatients <- allpatients[sort(names(allpatients))] healthypatients_mean <- healthypatients_mean[sort(names(healthypatients_mean))] healthypatients_sd <- healthypatients_sd[sort(names(healthypatients_sd))] # 批量计算标准化评分 scaled_all_patients <- pmap( # 传入三个顺序一一对应的分桶列表 .l = list(allpatients, healthypatients_mean, healthypatients_sd), .f = function(patient_df, h_mean, h_sd) { patient_df %>% # 对指定列逐列执行标准化计算 mutate(across(all_of(cols_to_scale), ~ (.x - h_mean[[cur_column()]]) / h_sd[[cur_column()]])) } ) %>% # 合并所有分桶结果为完整数据集 bind_rows()
逻辑说明
pmap会同时遍历三个列表的对应位置元素,确保同一个bucket的患者数据、健康均值、健康标准差配对处理,不会出现匹配错误across+cur_column()可以自动匹配当前处理列对应的均值和标准差,不需要逐个列写计算逻辑,新增要标准化的指标只需要修改cols_to_scale即可- 最终输出的
scaled_all_patients就是所有患者标准化后的全量数据集,和你给出的示例格式完全一致
内容的提问来源于stack exchange,提问作者smicaela
相关产品推荐
相关产品推荐

