如何判断剂量估计区间与实际剂量区间是否重叠并分类?
判断数值区间重叠的简便方法
我有如下结构的tibble数据,需要判断**估计剂量区间(Estimate_Min ~ Estimate_Max)和实际剂量区间(Dose_Min ~ Dose_Max)**是否重叠,需要两种输出结果:
原始数据:
library(tibble) df <- tibble( ID = c(1,2,3,4,5), Estimate_Min = c(18,15,3,11,0.5), Estimate_Max = c(25,22,8,12,18), Dose_Min = c(7,10,4,18,6), Dose_Max = c(14,13,5,20,12) )
需求1:添加布尔值标记重叠与否的Overlap列
期望输出:
# A tibble: 5 × 6 ID Estimate_Min Estimate_Max Dose_Min Dose_Max Overlap <dbl> <dbl> <dbl> <dbl> <dbl> <lgl> 1 1 18 25 7 14 FALSE 2 2 15 22 10 13 FALSE 3 3 3 8 4 5 TRUE 4 4 11 12 18 20 FALSE 5 5 0.5 18 6 12 TRUE
需求2:更详细的区间关系分类
分类规则:
- "IN":估计区间与实际区间至少部分重叠
- "OVER":估计区间完全在实际区间的上方(Estimate_Min > Dose_Max)
- "BELLOW":估计区间完全在实际区间的下方(Estimate_Max < Dose_Min)
期望输出:
# A tibble: 5 × 6 ID Estimate_Min Estimate_Max Dose_Min Dose_Max Overlap <dbl> <dbl> <dbl> <dbl> <dbl> <chr> 1 1 18 25 7 14 OVER 2 2 15 22 10 13 OVER 3 3 3 8 4 5 IN 4 4 11 12 18 20 BELLOW 5 5 0.5 18 6 12 IN
解决方案
核心判断逻辑
对于两个规范区间[a1, a2](a1 <= a2)和[b1, b2](b1 <= b2),存在重叠的判定公式为:a1 <= b2 & a2 >= b1
代码实现(基于dplyr)
先加载必要的包:
library(dplyr)
1. 生成布尔值重叠标记列
df_overlap_bool <- df %>% mutate(Overlap = Estimate_Min <= Dose_Max & Estimate_Max >= Dose_Min)
2. 生成详细区间分类列
df_overlap_detail <- df %>% mutate(Overlap = case_when( Estimate_Min <= Dose_Max & Estimate_Max >= Dose_Min ~ "IN", Estimate_Min > Dose_Max ~ "OVER", Estimate_Max < Dose_Min ~ "BELLOW", TRUE ~ "UNKNOWN" # 兜底逻辑,理论上不会触发 ))
内容的提问来源于stack exchange,提问作者Rizek_a_salat
相关产品推荐
相关产品推荐

