润滑到每月的最后一天

lubridate to last day of month

library(dplyr)
library(lubridate)

我有这样的数据

f <- tribble(~a, ~date,
             "BVH", 201801,
             "HBYU", 202012,
             "CYC", 202112,
             "AC", 202109)

而且我需要将它转换为一个月的最后一天,我这样做

f %>% mutate(date = ym(date))
# A tibble: 4 x 2
  a     date      
  <chr> <date>    
1 BVH   2018-01-01
2 HBYU  2020-12-01
3 CYC   2021-12-01
4 AC    2021-09-01

我想要的是,这个

# A tibble: 4 x 2
a     date      
<chr> <date>    
1 BVH   2018-01-31
2 HBYU  2020-12-31
3 CYC   2021-12-31
4 AC    2021-09-30

lubridate 的 rollforward 完全符合您的要求:

> f %>% mutate(date = rollforward(ym(date)))
# A tibble: 4 x 2
  a     date      
  <chr> <date>    
1 BVH   2018-01-31
2 HBYU  2020-12-31
3 CYC   2021-12-31
4 AC    2021-09-30

这里有另外两种方法 -

library(dplyr)
library(lubridate)

f %>%
  mutate(date = ym(date), 
         date1 = date + months(1) - 1, 
         date2 = ceiling_date(date, 'month') - 1)

#   a     date       date1      date2     
#  <chr> <date>     <date>     <date>    
#1 BVH   2018-01-01 2018-01-31 2018-01-31
#2 HBYU  2020-12-01 2020-12-31 2020-12-31
#3 CYC   2021-12-01 2021-12-31 2021-12-31
#4 AC    2021-09-01 2021-09-30 2021-09-30