在R中使用lubridate从YYYYMM年月变量获取月份最后一天
实现方案(基于lubridate包)
首先加载所需依赖包:
library(lubridate)
你的示例输入数据如下:
yearmonth <- c(seq(202001,202012), seq(202101,202112))
直接用以下代码即可得到你要的月份最后天数值:
# 核心逻辑:先解析为日期,再取当月最后一天提取日部分 last <- day(rollback(ym(as.character(yearmonth)) + months(1)))
也可以用另一种写法,效果完全一致:
last <- day(ceiling_date(ym(as.character(yearmonth)), unit = "month") - 1)
结果验证
输出的last变量和你给出的预期结果完全匹配:2020年2月对应29,2021年2月对应28,其余月份的最后天也完全符合公历规则。
逻辑说明
as.character(yearmonth):把整数型的年月值转成字符,供日期解析函数识别ym():lubridate提供的便捷解析函数,会把"YYYYMM"格式的字符解析为当月1号的日期对象+ months(1):日期加1个月,得到下月1号的日期rollback():lubridate自带函数,默认会把传入的日期回滚到上个月的最后一天,自动处理闰年、大小月问题day():从日期对象中提取日部分的数值,就是你要的当月最后天数字
内容的提问来源于stack exchange,提问作者PaulaSpinola
相关产品推荐
相关产品推荐

