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

如何用R计算患者各间隔年度内的平均样本数?

如何用R计算患者各间隔年度内的平均样本数?

嗨,这个需求用tidyverse工具链就能轻松搞定,我给你拆解下具体步骤和代码:

首先咱们得先把数据里的日期字符串转换成R能识别的日期格式,不然没法计算时间间隔;接着划分出每个样本对应的“年度区间”(比如基线后第1个12月、第2个12月);然后统计每个患者在每个区间的样本数,最后就能算出每个区间的平均样本数啦。

具体代码实现

library(tidyverse)

# 加载你的数据并转换日期格式
df <- tribble(
  ~ID, ~date, ~sample, ~baseline_date, ~last_date, ~FU,
  'PD1' , '2021-10-01', "sample1",'2021-10-01', '2022-07-07', '279 days',
  'PD1' , '2021-10-07', "sample2", '2021-10-01','2022-07-07', '279 days',
  'PD2' , '2021-10-22', "sample1", '2021-10-22','2023-02-23', '489 days',
  'PD2', '2023-02-23', "sample2", '2021-10-22', '2023-02-23', '489 days'
) %>%
  # 将所有日期列转换为R日期格式
  mutate(across(c(date, baseline_date, last_date), ymd)) %>%
  # 计算样本日期与基线日期的间隔年数,划分年度区间
  mutate(
    # 用lubridate的time_length精准计算年数
    years_since_baseline = time_length(difftime(date, baseline_date), "years"),
    # 划分成第1、第2...个12月区间,0-1年归为第1区间,1-2年归为第2区间
    year_interval = paste0("第", ceiling(years_since_baseline), "个12月区间")
  )

# 第一步:统计每个患者在每个区间的样本数
patient_sample_counts <- df %>%
  group_by(ID, year_interval) %>%
  summarise(sample_count = n(), .groups = "drop")

# 第二步:计算每个区间的平均样本数
average_samples <- patient_sample_counts %>%
  group_by(year_interval) %>%
  summarise(average_sample_count = mean(sample_count))

# 查看结果
print(average_samples)

补充:处理无样本的区间

如果有些患者在某个区间没有采集样本,你希望把这些情况的样本数计为0再算平均,可以用complete函数补全数据:

# 补全所有患者的所有区间,无样本的填0
patient_sample_counts_full <- patient_sample_counts %>%
  complete(ID, year_interval, fill = list(sample_count = 0))

# 重新计算平均
average_samples_full <- patient_sample_counts_full %>%
  group_by(year_interval) %>%
  summarise(average_sample_count = mean(sample_count))

print(average_samples_full)

这样运行后,你就能得到每个年度区间内患者的平均样本数啦~

备注:内容来源于stack exchange,提问作者Mia Lua

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 14:18:12