如何用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
相关产品推荐
相关产品推荐

