Вот вопрос, который я нашел, очень похож на мой, но даты начала и окончания могут иногда совпадать ( Найти перекрывающиеся даты для каждого идентификатора и создать новую строку для перекрытия ). Я хочу комментировать и спрашивать напрямую, но у меня нет репутации старше 15.
Предположим, данные выглядят так (скопировано с Uwe):
library(data.table)
DT <- fread(
"ID date1 date2 Value
15 2003-04-05 2003-05-06 1
15 2003-04-20 2003-06-20 1
16 2001-01-02 2002-03-04 2
17 2003-03-05 2007-02-22 1
17 2005-04-15 2014-05-19 2"
)
cols <- c("date1", "date2")
DT[, (cols) := lapply(.SD, as.IDate), .SDcols = cols]
Что я хочу получить, так это :
ID date1 date2 Value
15 2003-04-05 2003-04-19 1
15 2003-04-20 2003-05-06 2
15 2003-05-07 2003-06-20 1
17 2003-03-05 2005-04-14 1
17 2005-04-15 2007-02-22 3
17 2007-02-23 2014-05-19 2
, где даты начала и окончания не перекрываются.
Кроме того, это первый шаг от Уве, может кто-нибудь сказать мне, что здесь означает -1L? Я понимаю, что tmp - это временный вектор, но зачем нам -1?
library(data.table)
options(datatable.print.class = TRUE)
breaks <- DT[, {
tmp <- unique(sort(c(date1, date2)))
.(start = head(tmp, -1L), end = tail(tmp, -1L))
}, by = ID]
breaks
Спасибо!