基于附加条件计算不同类型眼部影像的最小日期间隔
解决按患者眼部计算不同类型影像最小间隔天数的问题
我们需要基于给定的tibble数据,为每只眼计算彩色(colour)与灰度(grayscale)影像之间的最小天数间隔,规则如下:
- 若某只眼缺少其中一种类型的影像,
minInterval设为NA - 仅计算不同类型影像间的间隔,同类型影像间的间隔忽略
完整解决方案代码
library(tidyverse) # 处理数据并计算最小间隔 data_processed <- data %>% # 按患者+眼部维度分组 group_by(patient, side) %>% # 标记组内是否同时存在两种类型的影像 mutate( has_colour = any(type == "colour"), has_grayscale = any(type == "grayscale") ) %>% # 提取每组的两类影像日期列表 summarise( colour_dates = list(date[type == "colour"]), grayscale_dates = list(date[type == "grayscale"]), has_both = has_colour & has_grayscale, .groups = "drop" ) %>% # 计算跨类型影像的最小间隔天数 mutate( minInterval = ifelse( has_both, map2_dbl(colour_dates, grayscale_dates, ~min(abs(.x - .y))), NA_integer_ ) ) %>% # 整理输出列 select(patient, side, minInterval) # 查看结果 data_processed
代码逻辑说明
- 分组与类型校验:按
patient和side分组,先确认每组是否同时包含两种类型的影像,这是计算间隔的前提。 - 日期列表提取:将每组内的彩色、灰度影像日期分别存入列表,方便后续生成所有跨类型的日期组合。
- 最小间隔计算:对同时拥有两类影像的组,生成所有跨类型日期对,计算日期差的绝对值后取最小值;不满足条件的组直接赋值
NA。 - 结果整理:仅保留需要的输出列,得到最终的患者-眼部-最小间隔数据集。
示例验证
运行上述代码后,输出结果与给定的output完全一致:
- 患者a的右眼仅存在彩色影像,
minInterval为NA - 患者b的左眼,彩色(10-10-21)与灰度(11-10-21)影像间隔1天,为最小间隔
- 患者c的右眼,彩色(20-02-20)与灰度(10-02-20)影像间隔10天,为最小间隔
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

