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

如何获取对应最低死亡率的医院名称?求R代码优化方案

解决方案:获取对应最低死亡率的医院名称

你的现有代码核心问题是:tapply只提取了死亡率数据分组排序,完全丢失了和医院名称的关联,所以没法直接对应回医院信息。下面是修正后的实现思路和代码:

基础R实现步骤

  • 先筛选阿拉巴马州(AL)的肺炎有效数据,排除死亡率为NA的行:
# 筛选目标州+疾病的有效数据
al_pneumonia_data <- data[data$State == "AL" & !is.na(data$Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia), ]
  • 提取该州肺炎的最低死亡率:
lowest_rate <- min(al_pneumonia_data$Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia)
  • 匹配对应的医院名称(如果有多个医院并列最低,会返回所有;若要取名称排序后的第一个,再加一步排序):
# 获取所有并列最佳的医院
best_hospitals <- al_pneumonia_data$Hospital.Name[al_pneumonia_data$Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia == lowest_rate]
# 按名称排序后取第一个(处理并列场景)
top_best_hospital <- sort(best_hospitals)[1]

函数化优化方案(适配参数传入)

如果要写成接收州和疾病参数的通用函数,推荐用dplyr简化逻辑(代码更清晰易维护):

library(dplyr)

get_best_hospital <- function(target_state, target_disease) {
  # 建立疾病与对应列名的映射,避免硬编码
  disease_col_map <- list(
    pneumonia = "Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia",
    heart_failure = "Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure",
    heart_attack = "Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack"
  )
  
  target_column <- disease_col_map[[target_disease]]
  
  data %>%
    # 筛选目标州+非缺失的死亡率数据
    filter(State == target_state, !is.na(.data[[target_column]])) %>%
    # 按死亡率升序、医院名称升序排序
    arrange(.data[[target_column]], Hospital.Name) %>%
    # 取第一行
    slice(1) %>%
    # 提取医院名称
    pull(Hospital.Name)
}

# 调用示例:获取阿拉巴马州肺炎最佳医院
get_best_hospital("AL", "pneumonia")

现有代码的优化点

  • 放弃tapply处理多列关联数据:tapply仅适合单变量的分组聚合,无法保留原始行的多字段关联,这里必须基于完整行筛选。
  • 强制处理缺失值:死亡率列大概率存在NA,直接计算min会得到无效结果,必须先过滤。
  • 处理并列场景:多个医院可能有相同最低死亡率,按名称排序取第一个是行业通用的处理规则。
  • 函数化用列名映射:避免硬编码疾病列名,让函数适配三种疾病的查询,扩展性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 16:15:15