我有一个格式的数据框
Account ID, Start Date, End Date
1 , 2016-01-01, 2016-02-01
1 , 2016-02-02, 2016-03-01
1 , 2016-03-01, 2016-04-01
2 , 2016-01-01, 2016-02-01
2 , 2016-03-02, 2016-03-20
2 , 2016-03-21, 2016-04-01
我希望生成的数据帧看起来像。
Account ID, Start Date, End Date
1 , 2016-01-01, 2016-04-01
2 , 2016-01-01, 2016-02-01
2 , 2016-03-02, 2016-04-01
这样,如果末日日期和随后的帐户开始日期之间的少于7天,它将合并为一个,并使用后一个记录的结束日期和以前记录的开始日期。p>我已经尝试使用铅和lag进行了dplyr的分组,但这对具有3个或更多记录的帐户不起作用。
在示例中,
帐户ID 1是通过AccountID进行分组的情况,Max,Min将工作
但是帐户ID 2是一种行不通的情况。
任何帮助都非常感谢。
您的数据:
dat <- read.table(text = "AccountID StartDate EndDate
1 2016-01-01 2016-02-01
1 2016-02-02 2016-03-01
1 2016-03-01 2016-04-01
2 2016-01-01 2016-02-01
2 2016-03-02 2016-03-20
2 2016-03-21 2016-04-01", header = TRUE, stringsAsFactors = FALSE)
dat[2:3] <- lapply(dat[2:3], as.Date)
分组后可以使用lag
:
library(dplyr)
group_by(dat, AccountID) %>%
mutate(
week = cumsum(StartDate - lag(EndDate, default = 0) > 7)
) %>%
group_by(AccountID, week) %>%
summarize(
StartDate = min(StartDate),
EndDate = max(EndDate)
) %>%
ungroup()
# # A tibble: 3 × 4
# AccountID week StartDate EndDate
# <int> <int> <date> <date>
# 1 1 1 2016-01-01 2016-04-01
# 2 2 1 2016-01-01 2016-02-01
# 3 2 2 2016-03-02 2016-04-01