给定此数据帧:
library(tidyverse)
library(lubridate)
df <- tribble(
~person, ~start, ~end,
'1', '2000-01-01', '2000-12-31',
'1', '2001-01-01', '2002-07-31',
'1', '2001-04-01', '2001-06-30',
'1', '2001-08-01', '2001-12-31',
'1', '2002-01-01', '2002-12-31',
'2', '2000-01-01', '2000-11-30',
'2', '2001-01-01', '2001-12-31') |>
mutate(start = lubridate::as_date(start),
end = lubridate::as_date(end))
我正在try 产生输出,以显示:
person start end
1 2000-01-01 2002-12-31
2 2000-01-01 2001-11-30
2 2001-01-01 2001-12-31
这些数据有重叠的日期,所以我正在try 创建一组连续的、没有错误的开始和结束日期.
我试过这个
df |>
distinct() |>
arrange(person, start, end) |>
mutate(
gap = start - lag(end, default = min(start))
) |>
group_by(person) |>
summarise(
MIN_START = min(start),
MAX_END = max(end)
)
但这会取第一个最小日期和最后一个最大日期,并忽略其间的任何中断.对如何做到这一点有什么建议吗?