Давайте возьмем тривиальный кадр данных
structure(list(a = structure(c(1L, 1L, 1L, 2L, 2L, 2L), .Label = c("a",
"b"), class = "factor"), dt = structure(c(NA, 17287, 17318, NA,
17379, 17410), class = "Date")), .Names = c("a", "dt"), row.names = c(NA,
-6L), class = "data.frame")
, что дает следующее
a dt
1 a <NA>
2 a 2017-05-01
3 a 2017-06-01
4 b <NA>
5 b 2017-08-01
6 b 2017-09-01
По моим фактическим данным, это происходит несколько раз. Как я могу засыпать с датой начала предыдущего месяца.
В идеале я хотел бы сделать это, используя dplyr
. Самое близкое, что я мог получить, это использовать lubridate::floor_date
и dplyr::lead
, что привело к тому, что последняя дата стала NA
.
tmp %>%
group_by(a) %>%
mutate(dt = floor_date(lead(dt, 1) - 1, "month"))
# A tibble: 6 x 2
# Groups: a [2]
a dt
<fct> <date>
1 a 2017-04-01
2 a 2017-05-01
3 a NA
4 b 2017-07-01
5 b 2017-08-01
6 b NA
Мысли были бы оценены.