Вот то, что я смог придумать.Не такой элегантный, как MauritsEvers, но может быть полезен для других.
combine_exposures <- function(...) {
cd <- c(...)
mc <- mcols(cd)
dj <- disjoin(x = cd, with.revmap = TRUE)
r <- mcols(dj)$revmap
d <- as.data.frame(matrix(nrow = length(dj), ncol = ncol(mc)))
names(d) <- names(mc)
for (i in 1:length(dj)) {
d[i,] <- sapply(X = 1:ncol(mc), FUN = function(j) { mc[r[[i]][j], j] })
}
mcols(dj) <- d
return(dj)
}
здесь dput(c(e1, e2, e3, e4))
(e1, e2, e3 и e4 - некоторые примеры IRanges, которые охватывают 1 167):
new("IRanges", start = c(1L, 1L, 108L, 113L, 1L, 1L), width = c(167L,
107L, 5L, 55L, 167L, 167L), NAMES = NULL, elementType = "ANY",
elementMetadata = new("DataFrame", rownames = NULL, nrows = 6L,
listData = list(on_betalac = c(FALSE, NA, NA, NA, NA,
NA), on_other = c(NA, FALSE, TRUE, FALSE, NA, NA), on_pen = c(NA,
NA, NA, NA, FALSE, NA), on_quin = c(NA, NA, NA, NA, NA,
FALSE)), elementType = "ANY", elementMetadata = NULL,
metadata = list()), metadata = list())