如何在R中更优雅地计算不同时间点的肿瘤生长率及均值?
在R中优雅计算肿瘤生长率及平均生长率的方法
核心思路
先按肿瘤分组,计算每个随访间隔的生长率(尺寸变化÷月份间隔),再对每个肿瘤的所有间隔生长率取平均得到单肿瘤生长率,最后计算所有肿瘤的整体平均生长率。用dplyr包可实现简洁的批量处理,彻底替代手动计算的繁琐操作。
步骤与代码示例
1. 准备数据
假设你的数据是长格式(每行对应一个肿瘤的一次随访记录,包含肿瘤ID、随访月份、肿瘤尺寸),先模拟一份示例数据:
set.seed(123) library(dplyr) # 模拟长格式随访数据 tumor_data <- tibble( tumor_id = rep(1:3, each = 4), # 3个肿瘤,每个4次随访 follow_up_month = c(0, 2, 12, 23, 0, 5, 15, 20, 0, 3, 8, 15), # 随访时间(月) size_cm = c(2.5, 2.3, 3.0, 2.9, 1.8, 2.0, 2.5, 2.7, 3.2, 3.0, 3.5, 3.3) # 肿瘤尺寸(cm) )
如果你的数据是宽格式(每行是一个肿瘤,列是不同时间点的月份和尺寸),可先转成长格式:
# 模拟宽格式数据 wide_tumor_data <- tibble( tumor_id = 1:3, t1_month = 0, t1_size = c(2.5,1.8,3.2), t2_month = c(2,5,3), t2_size = c(2.3,2.0,3.0), t3_month = c(12,15,8), t3_size = c(3.0,2.5,3.5), t4_month = c(23,20,15), t4_size = c(2.9,2.7,3.3) ) # 宽转长 long_data <- wide_tumor_data %>% tidyr::pivot_longer( cols = -tumor_id, names_to = c("time_point", ".value"), names_pattern = "t(\\d+)_(month|size)" ) %>% arrange(tumor_id, time_point)
2. 计算生长率
用dplyr的分组、突变、汇总功能一键完成:
# 计算单肿瘤平均生长率 + 整体平均生长率 growth_result <- tumor_data %>% arrange(tumor_id, follow_up_month) %>% # 确保每个肿瘤的随访按时间排序 group_by(tumor_id) %>% mutate( size_change = size_cm - lag(size_cm), # 相邻随访的尺寸变化 month_interval = follow_up_month - lag(follow_up_month), # 随访间隔月份 interval_growth_rate = size_change / month_interval # 单个间隔的生长率 ) %>% summarise(avg_tumor_growth = mean(interval_growth_rate, na.rm = TRUE)) %>% # 单肿瘤平均生长率 ungroup() %>% mutate(overall_avg_growth = mean(avg_tumor_growth)) # 所有肿瘤的平均生长率 # 查看结果 print(growth_result)
代码说明
arrange():确保每个肿瘤的随访记录按时间顺序排列,避免计算相邻时间点时出错。group_by(tumor_id):按肿瘤分组,实现每个肿瘤单独计算。lag():获取上一次随访的数值,用来计算尺寸变化和时间间隔,首次随访的结果为NA,后续用na.rm=TRUE忽略。summarise():对每个肿瘤的所有间隔生长率取平均,得到单肿瘤的平均生长率;最后再计算整体平均。
内容的提问来源于stack exchange,提问作者user2930701
相关产品推荐
相关产品推荐

