按patient_ID分组提取对应舒张压最大值的血压测量数据方案
按患者分组提取舒张压最高的对应血压记录
我们有一个记录患者多次血压测量的数据集,每行代表一次独立观测,结构如下:
# 示例数据集 bp_data <- data.frame( patient_ID = c('1','1','1','2','2','2'), bp_systolic = c(80, 85, 72, 95, 90, 75), bp_diastolic = c(120, 133, 100, 140, 130, 120) )
需求是按patient_ID分组,提取每组中舒张压(bp_diastolic)最高的那次测量对应的收缩压和舒张压,必须保证两个血压值来自同一次测量,不能分别取各组收缩压和舒张压的最大值。
方法1:Base R实现
通过分组排序后提取每组的目标记录:
# 按患者ID分组,每组内按舒张压降序排序 sorted_data <- bp_data[order(bp_data$patient_ID, -bp_data$bp_diastolic), ] # 提取每组的第一条记录(排序后最高舒张压的记录排在每组最前) result <- sorted_data[!duplicated(sorted_data$patient_ID), ] # 重命名列名匹配需求 colnames(result) <- c("patient_ID", "highest_systolic", "highest_diastolic") # 查看结果 result
方法2:tidyverse(dplyr)实现
用dplyr的分组筛选功能,逻辑更直观:
library(dplyr) result <- bp_data %>% group_by(patient_ID) %>% # 筛选出每组中舒张压最大的行 filter(bp_diastolic == max(bp_diastolic)) %>% # 重命名列名 rename(highest_systolic = bp_systolic, highest_diastolic = bp_diastolic) %>% ungroup() # 查看结果 result
最终结果表
| patient_ID | highest_systolic | highest_diastolic |
|---|---|---|
| 1 | 85 | 133 |
| 2 | 95 | 140 |
内容的提问来源于stack exchange,提问作者neuroandstats
相关产品推荐
相关产品推荐

