R语言中批量转换混合格式Excel日期向量为标准日期的问题
解决混合格式日期转换问题
你的代码出错主要有两个原因:
- 未加载
lubridate包,dmy()函数无法被识别; - 使用
lapply()会返回列表而非日期向量,且Excel日期存在历史闰年bug,直接用origin='1900-01-01'转换会导致日期偏差一天。
下面是修正后的可行方案:
首先确保安装并加载lubridate包:
install.packages("lubridate") library(lubridate)
然后执行转换代码:
t1 <- c("14/02/2020", "17/02/2020", "18/02/2020", "19/02/2020", "20/02/2020", "21/02/2020", "26/02/2020", "27/02/2020", "28/02/2020", "43864", "43893", "43924", "43954", "43985", "44077") # 区分两种格式的日期 is_char_date <- grepl("/", t1) # 初始化日期向量 standard_dates <- as.Date(NA, origin = "1900-01-01") # 转换dd/mm/yyyy格式的字符日期 standard_dates[is_char_date] <- dmy(t1[is_char_date]) # 转换Excel数值型日期(修正1900闰年bug,数值减1) standard_dates[!is_char_date] <- as.Date(as.numeric(t1[!is_char_date]) - 1, origin = "1900-01-01") # 查看结果 standard_dates
执行后会得到标准的Date类型向量,所有日期都会正确转换。
内容的提问来源于stack exchange,提问作者Osvaldo Assunção
相关产品推荐
相关产品推荐

