【发布时间】:2020-08-21 06:15:25
【问题描述】:
我正在尝试计算海洋物种和人类活动的重叠深度范围。因此,对于每个物种,它都有一个最小和最大深度,我想有效地计算与 4 个不同活动的深度范围重叠的深度范围。我认为这可以通过data.table::foverlaps() 或IRanges::findOverlaps() 完成,但我无法弄清楚如何计算重叠的值,而不仅仅是它是真还是假。因此,如果物种 D 出现在 40-100m 深度,而活动 1 发生在 0-50m 深度,则重叠为 10m。
例如,
min_1 <- 0
max_1 <- 50
min_2 <- 0
max_2 <- 70
min_3 <- 0
max_3 <- 200
min_4 <- 0
max_4 <- 500
activities <- data.frame(min_1, max_1, min_2, max_2, min_3, max_3, min_4, max_4)
spp_id <- c("a", "b", "c", "d")
spp_depth_min <- c(0, 20, 30, 40)
spp_depth_max <- c(200, 500, 50, 100)
species <- data.frame(spp_id, spp_depth_min, spp_depth_max)
## data.table approach?
setDT(activities)
setDT(species)
foverlaps(species, activities, ...) ## Or do I need to subset each activity and do separate calculations?
写一个函数会更容易吗?我真的很陌生!这似乎应该是一件常见/容易的事情,我不知道为什么它让我这么困惑
【问题讨论】: