使用lubridate将年月格式数据转换为当月最后一天的实现方法
解决方法
你已加载dplyr和lubridate包,只需在原有日期转换逻辑的基础上,搭配lubridate内置的日期处理函数即可实现需求,共有3种常用实现方案:
方案1:调用内置last_day()函数(lubridate 1.7.0及以上版本支持,最简洁)
f %>% mutate(date = last_day(ym(date)))
- 逻辑说明:lubridate内置的
last_day()函数可以直接返回输入日期所在月份的最后一天,自动适配不同月份天数、闰年2月等特殊场景。
方案2:用ceiling_date()+日期偏移实现
f %>% mutate(date = ym(date) %>% ceiling_date(unit = "month") - days(1))
- 逻辑说明:
ym()先把6位数值转成当月首日,ceiling_date(unit = "month")会把日期跳到下一个月的首日,再减1天就得到当前月的最后一天,兼容所有lubridate版本。
方案3:用rollback()函数实现
f %>% mutate(date = rollback(ym(date) + months(1)))
- 逻辑说明:
ym(date) + months(1)先把当月首日偏移到下一个月的同日,rollback()函数会自动回退到上一个月的最后一天,逻辑直观。
以上三种方案运行后均可得到你需要的输出结果:
# A tibble: 4 × 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
内容的提问来源于stack exchange,提问作者Eric Fail
相关产品推荐
相关产品推荐

