R语言将ROI按仿真时间映射到统计转储时间区间的实现方法
R语言ROI与统计转储时间区间匹配方案
现有数据说明
1. stat_dumps数据框
记录各统计转储对应的仿真时间滴答起始值(startTick)和结束值(finalTick),构造代码如下:
stat_dumps <- data.frame(rbind(list(1,101,201,301,401), list(100,200,300,400,500))) colnames(stat_dumps) <- c("dump.1", "dump.2", "dump.3", "dump.4", "dump.5") rownames(stat_dumps) <- c("startTick", "finalTick")
2. roi_times数据框
记录感兴趣区域(ROI)对应的仿真时间滴答起始值(begin)和结束值(end),构造代码如下:
roi_times <- data.frame(rbind(list(1,2,3,4), list(40,75,140,480), list(70,95,230,520))) colnames(roi_times) <- c("roi.1", "roi.2", "roi.3", "roi.4") rownames(roi_times) <- c("roi", "begin", "end")
需求说明
需将ROI按时间重叠规则匹配到对应统计转储区间,在stat_dumps中新增covered_rois行,标注每个统计转储覆盖的ROI。时间重叠判断规则为:ROI开始时间 <= 转储结束时间,且ROI结束时间 >= 转储开始时间。
实现代码
# 转换ROI数据为长表格式方便匹配 roi_df <- data.frame( roi_id = colnames(roi_times), begin = as.numeric(roi_times["begin", ]), end = as.numeric(roi_times["end", ]) ) # 遍历每个统计转储区间匹配对应ROI matched_rois <- sapply(colnames(stat_dumps), function(dump_col) { dump_start <- stat_dumps["startTick", dump_col] dump_end <- stat_dumps["finalTick", dump_col] hit_rois <- roi_df$roi_id[roi_df$begin <= dump_end & roi_df$end >= dump_start] return(ifelse(length(hit_rois) == 0, "", paste(hit_rois, collapse = ","))) }) # 新增匹配结果行到stat_dumps stat_dumps["covered_rois", ] <- matched_rois
结果示例
运行代码后得到的stat_dumps如下:
| dump.1 | dump.2 | dump.3 | dump.4 | dump.5 | |
|---|---|---|---|---|---|
| startTick | 1 | 101 | 201 | 301 | 401 |
| finalTick | 100 | 200 | 300 | 400 | 500 |
| covered_rois | roi.1,roi.2 | roi.3 | roi.3 | roi.4 |
内容的提问来源于stack exchange,提问作者vic
相关产品推荐
相关产品推荐

