在R中为存在多次测量的参与者保留首次体重测量值
在R中保留每位参与者每日的首次体重观测
你有一份纵向数据集,每个参与者同一天存在多条体重测量记录,目标是保留每个ID+日期组合的第一条观测。以下是具体实现方法:
示例数据
先构造你提供的示例数据集:
df <- data.frame( ID = c(1, 1, 1, 2, 2, 2), Date = c("2/1", "2/1", "2/1", "2/1", "2/1", "2/1"), Weight = c(160, 159, 160.5, 200, 198, 201) )
方法1:基础R实现
利用ave()函数按ID和Date分组,筛选出每组的第一行:
# 筛选每组第一条记录 df_first <- df[ave(seq(nrow(df)), df$ID, df$Date, FUN = function(x) x == min(x)), ]
方法2:tidyverse(dplyr)实现
如果习惯tidyverse语法,用分组+取首行的方式更直观:
library(dplyr) # 分组后保留每组第一条 df_first <- df %>% group_by(ID, Date) %>% slice_head(n = 1) %>% # 或用 slice(1) 效果一致 ungroup()
最终结果
运行上述代码后,得到的数据集如下:
print(df_first) # ID Date Weight # 1 1 2/1 160 # 2 2 2/1 200
内容的提问来源于stack exchange,提问作者Anas Alkanderi
相关产品推荐
相关产品推荐

