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

R语言pivot_wider生成列表列 如何分组计算检验指标统计量

问题原因

pivot_wider生成列表列是因为单个encounter_id对应同一within_24_hours取值存在多条观测,宽格式单个单元格无法存储多个数值,函数默认将值封装为列表。这个需求不需要转宽格式,按「过滤-分组-汇总」的流程直接处理即可,逻辑更简洁,运行效率更高。

可直接运行的实现代码
library(tidyverse)

# 示例数据构造(和你给出的代码一致)
encounter_id <- c(1,1,1, 2,2,2, 3,3,3, 4,4,4)
wbc <- c(13,NA,13, NA,NA,14, 15,9,15, 11,10,12)
hb <- c(13,NA,12, NA,13,14, 15,NA,15, 11,8,12)
temp <- c(100,NA,97, 103,NA,104, 100,99,NA, 100,101,101)
hr <- c(133,NA,132, NA,NA,104, 155,160,NA, 60,NA,70)
within_24_hours <- c(1,0,1, 1,1,0, 1,1,1, 0,0,1)
df <- tibble(encounter_id, wbc, hb, temp, hr, within_24_hours)

# 核心计算逻辑
df_result <- df %>%
  # 筛选24小时内的采集记录
  filter(within_24_hours == 1) %>%
  # 按就诊ID分组
  group_by(encounter_id) %>%
  # 批量计算四个检验指标的统计量
  summarise(
    across(
      .cols = c(wbc, hb, temp, hr),
      .fns = list(
        mean = ~mean(.x, na.rm = T),
        median = ~median(.x, na.rm = T),
        max = ~max(.x, na.rm = T),
        min = ~min(.x, na.rm = T)
      ),
      .names = "{.col}_{.fn}"
    )
  )
代码说明
  • 所有统计函数均添加na.rm = T参数,自动跳过数据中的缺失值,适配示例数据中的NA情况
  • 用across()批量处理多列,避免逐列编写重复的统计代码
  • 输出列名自动按「指标名_统计量」格式命名,比如wbc_mean对应白细胞均值,hb_max对应血红蛋白最大值,可读性强
结果预览

运行后输出4行结果,每个就诊ID对应一行聚合数据:

# A tibble: 4 × 17
  encounter_id wbc_mean wbc_median wbc_max wbc_min hb_mean hb_median hb_max hb_min temp_mean temp_median temp_max temp_min hr_mean hr_median hr_max hr_min
         <dbl>    <dbl>      <dbl>   <dbl>   <dbl>   <dbl>     <dbl>  <dbl>  <dbl>     <dbl>       <dbl>    <dbl>    <dbl>   <dbl>     <dbl>  <dbl>  <dbl>
1            1     13         13       13      13    12.5      12.5     13     12      98.5        98.5      100       97    132.5     132.5    133    132
2            2     14         14       14      14    13        13       13     13     103         103        103      103    104       104      104    104
3            3     13         15       15       9    15        15       15     15      99.5        99.5      100       99    157.5     157.5    160    155
4            4     12         12       12      12    12        12       12     12     101         101        101      101     70        70       70     70

如果坚持要用宽格式思路处理,需要先给每个组内的记录添加行序号作为唯一标识,再执行pivot_wider,但这个步骤完全多余,不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:09:16