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

R工具求助:如何高效将24列医疗价格数据的中位数、IQR汇总为表格

高效计算多列价格的中位数与IQR并整理为表格

针对你的医疗数据场景,推荐用tidyverse工具链自动化完成统计量计算和表格整理,彻底替代手动复制粘贴的繁琐操作。以下是具体步骤:

1. 准备工作(安装并加载包)

tidyverse整合了数据重塑和操作的核心工具,代码可读性强,适合新手:

# 首次使用先安装包
install.packages("tidyverse")
# 加载包
library(tidyverse)

2. 将宽格式数据转为长格式

你的24列是「价格类型_版本」的组合(比如chargemaster_231),先转成每行对应单条价格记录的长格式,方便后续分组统计:

# 假设数据框名为cabg,筛选所有价格列
cabg_long <- cabg %>%
  pivot_longer(
    cols = starts_with(c("medicare", "chargemaster", "selfpay", "commercial")),
    names_to = c("price_type", "version"),
    names_sep = "_"  # 按下划线拆分列名为价格类型和版本号
  )

3. 分组计算中位数和IQR

按价格类型和版本分组,一次性算出所有统计量:

summary_table <- cabg_long %>%
  group_by(price_type, version) %>%
  summarise(
    中位数 = median(value, na.rm = TRUE),  # 忽略缺失值
    IQR = IQR(value, na.rm = TRUE),
    .groups = "drop"  # 计算完成后取消分组
  )

运行后summary_table就是整洁的长格式表格,包含每种价格类型、每个版本对应的中位数和IQR。

4. 可选:转为宽格式表格(更直观)

如果需要把版本号作为列、价格类型作为行的宽表,用pivot_wider转换:

summary_wide <- summary_table %>%
  pivot_wider(
    names_from = version,
    values_from = c(中位数, IQR),
    names_glue = "{version}_{.value}"  # 列名格式为"231_中位数"
  )

备选:Base R方法(无需额外包)

如果不想安装tidyverse,可以用Base R循环实现:

# 筛选所有价格列
price_cols <- grep("(medicare|chargemaster|selfpay|commercial)", colnames(cabg), value = TRUE)

# 循环计算每列的中位数和IQR
stats_result <- t(sapply(cabg[price_cols], function(col) {
  c(median = median(col, na.rm = TRUE), iqr = IQR(col, na.rm = TRUE))
}))

# 整理成带类型和版本的数据框
summary_base <- as.data.frame(stats_result)
summary_base$price_type <- gsub("_\\d+", "", rownames(summary_base))
summary_base$version <- gsub(".*_", "", rownames(summary_base))

两种方法都能快速生成结构化统计表格,无需手动处理每一列。优先推荐tidyverse方法,后续扩展分析(比如可视化)也更便捷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:25:28