如何在R语言中删除冗余行,保留患者最大年龄记录?
保留每个患者年龄最大的完整记录
下面提供几种R语言的解决方案,都能保留原数据的所有列:
方法1:使用dplyr包(语法直观,推荐)
如果还没安装dplyr,先执行安装命令,之后加载包并处理数据:
install.packages("dplyr") library(dplyr) # 简洁写法:直接取每组年龄最大的一行 df_oldest <- df %>% group_by(RANDID) %>% slice_max(order_by = AGE, n = 1) %>% ungroup() # 另一种写法:筛选组内年龄等于最大值的行 df_oldest <- df %>% group_by(RANDID) %>% filter(AGE == max(AGE)) %>% ungroup()
- 如果同一患者存在多条年龄相同且为最大值的记录,第一种写法的
n=1会只保留第一条;若想保留所有这类记录,删掉n=1即可。
方法2:使用base R(无需额外安装包)
基于你已经写的aggregate,通过合并数据来保留全列:
# 先计算每个患者的最大年龄 max_age <- aggregate(AGE ~ RANDID, data = df, max) # 合并原数据与最大年龄表,筛选匹配的完整记录 df_oldest <- merge(df, max_age, by = c("RANDID", "AGE"))
方法3:使用data.table包(大数据场景更高效)
适合处理百万级以上的数据集,执行速度更快:
install.packages("data.table") library(data.table) # 转换为data.table格式 setDT(df) # 按患者分组,提取年龄最大的记录 df_oldest <- df[, .SD[AGE == max(AGE)], by = RANDID]
内容的提问来源于stack exchange,提问作者Louis
相关产品推荐
相关产品推荐

