R语言从Excel导入dataframe时如何处理复杂日期格式
问题原因
你导入的ServiceDate列中带数字的字符串是Excel的日期序列号,Windows版Excel默认以1900-01-01为第1天计数,之前转换出错是因为日期解析函数把字符串格式的数字直接识别为年份,而非天数偏移量。
解决方案
方法1:纯base R实现(无需额外安装包)
先把列中的"NULL"替换为缺失值,剩余内容转数值后以Excel的默认起始日为基准做日期转换:
dates$ServiceDate_new <- as.Date( # 替换NULL为NA,其余值转数值型 x = ifelse(dates$ServiceDate == "NULL", NA, as.numeric(dates$ServiceDate)), # 适配Windows Excel的历史日期bug,起始日设为1899-12-30 origin = "1899-12-30" )
方法2:用openxlsx包内置函数实现(代码更简洁)
openxlsx包的convertToDate已经默认适配了Excel的日期序列号规则,直接调用即可:
# 首次使用先安装包,已安装可跳过 # install.packages("openxlsx") library(openxlsx) dates$ServiceDate_new <- convertToDate(dates$ServiceDate)
验证转换结果
转换后可得到正确的日期格式,示例输出如下:
head(dates$ServiceDate_new, 5) # [1] "2021-08-26" "2021-10-29" "2021-07-24" "2021-11-14" "2021-11-02"
如果你使用的是Mac版Excel导出的文件,且转换后日期错位4年,可将base R方法中的
origin参数改为"1904-01-01"即可。
内容的提问来源于stack exchange,提问作者RL_Pug
相关产品推荐
相关产品推荐

