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

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()

逻辑说明

  1. 按患者ID字段m1分组后,计算每条记录活检日期与基准日期差的绝对值
  2. 用which.min()定位到绝对值最小的行,提取该行对应的biopsy值
  3. 分组状态下的mutate会把提取到的biopsy值自动同步到组内所有行,直接得到你需要的status列
    如果出现多条记录时间差绝对值完全一致的情况,which.min会默认取排序最靠前的记录,你可以根据实际业务规则调整筛选逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:15:03