Объединить линейные интервалы

У меня есть data.frame, который состоит из линейных интервалов для каждого id:

df <- data.frame(id = c(rep("a",3),rep("b",4),rep("d",4)),
                 start = c(3,4,10,5,6,9,12,8,12,15,27),
                 end = c(7,8,12,8,9,13,13,10,15,26,30))

Я ищу эффективную функцию, которая объединит все пересекающиеся интервалы для каждого id. Для df результат будет следующим:

res.df <- data.frame(id = c("a","a","b","d","d","d"),
                     start = c(3,10,5,8,12,27),
                     end = c(8,12,13,10,26,30))

Для чего в конечном итоге я смогу суммировать все объединенные интервалы для каждого id, чтобы получить их общую длину:

sapply(unique(res.df$id), function(x) sum(res.df$end[which(res.df$id == x)]-res.df$start[which(res.df$id == x)]+1))

person user1701545    schedule 21.03.2016    source источник
comment
Это может быть полезно: intersectio" title="можно ли использовать функцию foverlaps таблицы данных r для поиска intersectio">stackoverflow.com/questions/27574775/   -  person thelatemail    schedule 21.03.2016