在R中按医院分类,将不同性别患者疼痛评分排名后导出至对应Excel文件
按医院拆分并导出分性别排序的Excel文件
前置准备
首先安装并加载openxlsx包(无需Java依赖,支持多工作表写入):
install.packages("openxlsx") library(openxlsx)
修正模拟数据
原模拟数据中patient_gender存在拼写错误(femal应为female),修正后的完整模拟代码:
set.seed(123) # 设置随机种子保证结果可复现 id_hospital = sample(1:35, 1000, replace = T) id_patient = sample(1:1000, 1000, replace = F) hos_name = paste0('hos_', 1:35) hospital = sample(hos_name, 1000, replace = T) patient_gender = c("male", "female") # 修正拼写错误 Gender = sample(patient_gender, 1000, replace = T) pain_score = runif(1000, min=0.00, max =100.00) df = data.frame(id_hospital, id_patient, hospital, Gender, pain_score)
核心实现代码
遍历每家医院,拆分男女患者数据并按pain_score排序,最终导出对应Excel文件:
# 获取所有唯一医院名称 unique_hospitals <- unique(df$hospital) # 遍历每家医院 for(hos in unique_hospitals){ # 筛选当前医院的所有数据 hos_data <- subset(df, hospital == hos) # 拆分并排序女性患者数据(sheet1),按pain_score降序,改为ascending=TRUE可实现升序 female_data <- hos_data[hos_data$Gender == "female", ] female_sorted <- female_data[order(-female_data$pain_score), ] # 拆分并排序男性患者数据(sheet2) male_data <- hos_data[hos_data$Gender == "male", ] male_sorted <- male_data[order(-male_data$pain_score), ] # 创建新的Excel工作簿 wb <- createWorkbook() # 添加sheet1:女性患者排序数据 addWorksheet(wb, sheetName = "sheet1") writeData(wb, sheet = "sheet1", x = female_sorted) # 添加sheet2:男性患者排序数据 addWorksheet(wb, sheetName = "sheet2") writeData(wb, sheet = "sheet2", x = male_sorted) # 保存工作簿,文件名与医院名称一致 saveWorkbook(wb, file = paste0(hos, ".xlsx"), overwrite = TRUE) }
关键说明
- 排序规则:代码默认按
pain_score降序排名,若需升序,将order(-xxx)改为order(xxx)即可 - 文件覆盖:
overwrite = TRUE会自动覆盖同名文件,如需避免覆盖可删除该参数或设为FALSE - 边界处理:若某医院某性别无数据(题目说明每家均有,此处仅作提示),对应工作表会写入空数据框
内容的提问来源于stack exchange,提问作者Identicon
相关产品推荐
相关产品推荐

