如何在R中筛选基线后1年±120天随访数据并计算急性加重总数
R语言实现随访记录筛选与急性加重次数统计
步骤1:加载工具包并导入数据
先加载tidyverse包(包含数据处理和日期操作的实用工具),再导入本地的测试数据集:
# 未安装则先安装,再加载tidyverse if (!require(tidyverse)) { install.packages("tidyverse") library(tidyverse) } # 导入本地数据(假设文件名为data.csv) df <- read_csv("data.csv")
步骤2:统一日期格式
确保baseline_date和fu_date转换为日期类型,避免字符串格式导致计算错误:
df <- df %>% mutate( baseline_date = as.Date(baseline_date), fu_date = as.Date(fu_date) )
如果你的日期格式不是默认的YYYY-MM-DD,可以在as.Date中指定格式,比如format = "%m/%d/%Y"适配月/日/年格式。
步骤3:筛选目标时间范围的随访记录
按患者ID分组,筛选出基线日期后245天到485天(365±120天)内的随访记录:
filtered_df <- df %>% group_by(subjectid) %>% filter( fu_date >= baseline_date + days(245), fu_date <= baseline_date + days(485) )
也可以通过计算天数差的方式筛选,效果一致:
filtered_df <- df %>% group_by(subjectid) %>% mutate(days_since_baseline = as.numeric(fu_date - baseline_date)) %>% filter(days_since_baseline >= 245 & days_since_baseline <= 485)
步骤4:计算每位患者的急性加重总数
基于筛选后的记录,按患者ID分组求和,生成急性加重次数汇总:
方式1:生成仅含患者ID和总次数的汇总表
exacerbation_summary <- filtered_df %>% group_by(subjectid) %>% summarise( total_exacerbations = sum(fu_exacerbations, na.rm = TRUE) # na.rm=TRUE处理缺失值 )
方式2:将总次数合并回原数据集
如果需要让原数据的每条记录都带上对应患者的总次数,用左连接实现:
df_with_total <- df %>% left_join(exacerbation_summary, by = "subjectid")
额外提示
- 用
glimpse(df)查看数据结构,确认日期转换是否成功 - 若数据存在缺失值,
na.rm = TRUE能避免求和时出现错误结果
内容的提问来源于stack exchange,提问作者Salman Aslam Chaudhary
相关产品推荐
相关产品推荐

