r语言 - dplyr条件分组日期



我有一个格式的数据框

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

最新更新