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

如何按受试者分组提取首次检查年龄(最小值)并生成新列?

为受试者随访数据集添加首次检查年龄列

我正在处理一份包含受试者随访检查数据的数据集,记录了每次检查时的年龄:

subject <- c("subject1", "subject1", "subject2", "subject2", "subject2", "subject3", "subject3")
ageAtExam <- c(50, 51, 30, 32, 35, 40, 45)
df <- data.frame(subject, ageAtExam)

# 原始数据集输出
> df
   subject ageAtExam
1 subject1        50
2 subject1        51
3 subject2        30
4 subject2        32
5 subject2        35
6 subject3        40
7 subject3        45

需求:新增一列ageAtFirstExam,填入每位受试者首次检查时的年龄(即每个subject对应的ageAtExam最小值),预期结果如下:

subject ageAtExam ageAtFirstExam
1 subject1        50             50
2 subject1        51             50
3 subject2        30             30
4 subject2        32             30
5 subject2        35             30
6 subject3        40             40
7 subject3        45             40

以下是几种可行的解决方案:

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

使用ave()函数按受试者分组计算最小值,并将结果映射到每一行:

df$ageAtFirstExam <- ave(df$ageAtExam, df$subject, FUN = min)

方法2:dplyr(tidyverse生态)

通过分组后添加新列的方式实现,适合习惯tidy语法的用户:

library(dplyr)

df <- df %>%
  group_by(subject) %>%
  mutate(ageAtFirstExam = min(ageAtExam)) %>%
  ungroup() # 取消分组,避免后续操作受分组影响

方法3:data.table(适合大数据集)

data.table的语法更高效,处理大规模数据时性能更优:

library(data.table)

setDT(df)[, ageAtFirstExam := min(ageAtExam), by = subject]

执行任意一种方法后,查看df即可得到预期的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:52:11