R语言中Excel字符型日期转日期格式失败求助
解决Excel导入R后日期序列号转日期格式的问题
问题本质
你看到的"43466"是Excel的日期序列号——Excel将日期存储为从1900年1月1日开始的天数(因历史闰年bug,实际对应R的origin = "1899-12-30"),导入R后变成了字符型,所以用dmy()或错误格式的as.Date()都会返回NA。
快速修复方法
直接把字符型序列号转成数值,再用as.Date()指定正确的origin:
# 1. 将字符型序列号转为数值型 Data$Datum <- as.numeric(Data$Datum) # 2. 转换为日期格式 Data$Datum_date <- as.Date(Data$Datum, origin = "1899-12-30")
验证:as.Date(43466, origin = "1899-12-30")会返回"2019-01-01",和你Excel里的起始日期一致。
避免后续麻烦的导入方法
如果用readxl包导入Excel,可直接指定列类型为日期,一步到位:
library(readxl) # 指定Datum列的类型为date,其他列默认自动识别 Data <- read_excel("你的文件路径.xlsx", col_types = c("date", "guess", ...))
也可以不手动指定列类型,readxl通常会自动识别Excel的日期列,无需后续转换。
之前方法失败的原因
as.Date(Data$Datum, "d%/m%/y%")格式字符串错误,正确的日/月/年格式应为"%d/%m/%Y"(4位年)或"%d/%m/%y"(2位年),且你的Datum是数字字符串而非日期字符,匹配失败。dmy(Data$Datum)用于识别"1-1-2019"这类日期字符,无法解析数字序列号,因此返回NA。
内容的提问来源于stack exchange,提问作者A.A
相关产品推荐
相关产品推荐

