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

如何用R按受试者最早采血时间过滤重复样本数据集?

使用R语言筛选每位患者的最早采血记录

核心思路

基于患者唯一标识(示例中的「研究ID」)分组,提取每组中采血日期最早的记录。以下是两种常用实现方案:


方案一:dplyr+lubridate基础处理(推荐新手)

这是通用度最高的方法,适配绝大多数场景:

1. 安装并加载依赖包

# 首次运行需安装包
install.packages(c("readxl", "dplyr", "lubridate"))

# 加载工具包
library(readxl)
library(dplyr)
library(lubridate)

2. 读取Excel数据

# 替换为你的Excel文件实际路径
df <- read_excel("你的数据集路径.xlsx")

3. 转换采血日期为日期格式

原始数据中的日期是字符型,必须转为日期格式才能正确比较先后:

df <- df %>%
  mutate(采血日期 = mdy(采血日期)) # 匹配m/d/y格式,若你的日期格式不同可改用dmy()/ymd()

4. 按研究ID分组,筛选最早记录

# 按研究ID分组,保留每组中采血日期最小的行
df_first_record <- df %>%
  group_by(研究ID) %>%
  filter(采血日期 == min(采血日期)) %>%
  ungroup() # 取消分组状态

如果同一患者同一天有多个记录,filter会保留所有同一天的记录;若只想保留其中一条,可改用:

df_first_record <- df %>%
  group_by(研究ID) %>%
  slice_min(采血日期, n = 1) %>%
  ungroup()

方案二:使用admiral包(临床数据专用)

admiral是专为临床研究数据设计的工具包,针对这类基线记录筛选有标准化函数:

1. 安装并加载admiral

install.packages("admiral")
library(admiral)

2. 处理日期并筛选最早记录

# 先统一日期格式
df <- df %>%
  mutate(采血日期 = mdy(采血日期))

# 使用admiral专用函数提取最早记录
df_first_record <- df %>%
  derive_extreme_records(
    by_vars = vars(研究ID), # 分组变量
    order = vars(采血日期), # 排序依据
    mode = "first" # 取最早记录
  )

注意事项

  • 若Excel日期格式混乱,可自动识别多格式:采血日期 = parse_date_time(采血日期, c("mdy", "dmy", "ymd"))
  • 确认「研究ID」是患者的唯一标识,若需加入其他分组维度,可调整group_by或by_vars中的变量
  • 十万级以内的数据集,上述方法效率足够,无需额外优化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:40:08