如何在R中将YYYY-MM格式的字符向量转为仅保留年月的Date格式?
解决R中YYYY-MM格式向量转日期类型的问题
为什么as.Date()返回NA?
R的Date对象本质是存储自1970-01-01以来的天数,必须包含日信息,仅传入YYYY-MM格式的字符串时,as.Date()无法解析出完整日期,因此返回NA。
解决方案
根据需求不同,有两种常用处理方式:
1. 补全日信息,转为Date对象后按需格式化
如果只是需要最终显示为%Y-%m格式,可先给每个字符串补全日(比如每月第一天-01),转换为Date对象后,用format()函数控制显示格式:
date_vec <- c("2020-01", "2020-02", "2020-03", "2020-04") # 补全日期为每月第一天,转换为Date对象 date_obj <- as.Date(paste0(date_vec, "-01"), format = "%Y-%m-%d") # 按%Y-%m格式输出 format(date_obj, "%Y-%m") # 输出结果:"2020-01" "2020-02" "2020-03" "2020-04"
2. 使用zoo包的yearmon类型(专门存储年月)
如果需要专门的年月数据类型,无需包含日信息,可以使用zoo包的yearmon类:
# 先安装并加载zoo包 install.packages("zoo") library(zoo) date_vec <- c("2020-01", "2020-02", "2020-03", "2020-04") # 转换为yearmon类型 ym_obj <- as.yearmon(date_vec, format = "%Y-%m") # 直接打印就是YYYY-MM格式 ym_obj # 输出结果:Jan 2020 Feb 2020 Mar 2020 Apr 2020 # 若要转为字符串格式的YYYY-MM format(ym_obj, "%Y-%m") # 输出结果:"2020-01" "2020-02" "2020-03" "2020-04"
内容的提问来源于stack exchange,提问作者Mukhtar Abdi
相关产品推荐
相关产品推荐

