R语言使用Dplyr按组选取与基准日期差值最小的活检结果
实现代码
你之前的代码存在一处笔误,计算时间差用到的recdate应为patodate,修正后完整的dplyr实现如下:
library(dplyr) # 方法1:不需要单独保留时间差列的写法 df <- df %>% mutate( patodate = as.Date(patodate), baselinedate = as.Date(baselinedate) ) %>% group_by(m1) %>% mutate( # 取组内活检日期和基准日期差的绝对值最小的记录对应的biopsy值 status = biopsy[which.min(abs(patodate - baselinedate))] ) %>% ungroup() # 方法2:保留你之前计算的diff列的写法 df <- df %>% mutate( patodate = as.Date(patodate), baselinedate = as.Date(baselinedate) ) %>% group_by(m1) %>% mutate( diff = baselinedate - patodate, status = biopsy[which.min(abs(diff))] ) %>% ungroup()
逻辑说明
- 按患者ID字段
m1分组后,计算每条记录活检日期与基准日期差的绝对值 - 用
which.min()定位到绝对值最小的行,提取该行对应的biopsy值 - 分组状态下的
mutate会把提取到的biopsy值自动同步到组内所有行,直接得到你需要的status列
如果出现多条记录时间差绝对值完全一致的情况,which.min会默认取排序最靠前的记录,你可以根据实际业务规则调整筛选逻辑。
内容的提问来源于stack exchange,提问作者Tobias Berg
相关产品推荐
相关产品推荐

