У меня есть небольшая хитрая проблема с кодированием, на которую я надеялся, что у кого-то может быть решение.
По сути, у меня есть очень большой набор данных о пребывании (идентификаторы лиц, пропуски, выписки),> 10 млн.
library(dplyr)
library(lubridate)
dat <- read.csv(text="
personid, start, end
1, 2017-09-01, 2017-10-01
1, 2017-10-05, 2017-10-07
2, 2017-10-21, 2017-11-01
3, 2017-12-01, 2017-12-15
3, 2017-12-27, 2017-12-31") %>%
transmute(
personid,
start = ymd(start),
end = ymd(end))
Каждое пребывание не перекрывается, но у нас есть логическое правилогде, если пребывание происходит в течение 10 дней друг от друга, мы хотим объединить их как единое целое (т.е. оставить более раннее признание и последующее увольнение).Чтобы окончательный набор данных был уникальным, он должен находиться не менее 10 дней друг от друга.
например:
1, 2017-09-01, 2017-10-07
2, 2017-10-21, 2017-11-01
3, 2017-12-01, 2017-12-15
3, 2017-12-27, 2017-12-31
Есть несколько сообщений о перекрывающихся интервалах, но это немного отличается: Объединение набора временных интервалов, цепочек интервалов в один интервал Я думаю, что это слишком сложно по сравнению с тем, что мне нужно.
Я также надеялся на решение dplyr или data.table, хотя оператор group_by занимает довольно много времени.