使用readxl导入Excel时日期检测与转换异常问题求助
解决Excel日期导入R后格式异常及转换NA问题
首先先确认导入后两列的实际内容,运行以下代码查看:
head(ba_data$STARTED)
情况1:导入的是Excel日期序列化数字(如"45231"这类字符串)
这是因为Excel把日期存储为以1899-12-30为起点的天数,导入时被识别成了字符。可以这样转换:
# 转成仅包含日期的格式 ba_data$STARTED <- as.Date(as.numeric(ba_data$STARTED), origin = "1899-12-30") ba_data$LASTDATA <- as.Date(as.numeric(ba_data$LASTDATA), origin = "1899-12-30") # 如果需要保留时分秒,用POSIXct格式 ba_data$STARTED <- as.POSIXct(as.numeric(ba_data$STARTED)*86400, origin = "1899-12-30", tz = "UTC") ba_data$LASTDATA <- as.POSIXct(as.numeric(ba_data$LASTDATA)*86400, origin = "1899-12-30", tz = "UTC")
情况2:导入的是y/m/d h:min:sec格式的字符但anydate未识别
用lubridate包的精准解析函数:
library(lubridate) ba_data$STARTED <- ymd_hms(ba_data$STARTED) ba_data$LASTDATA <- ymd_hms(ba_data$LASTDATA)
更稳妥的方法:导入时直接指定列类型
避免后续转换麻烦,导入时就告诉read_excel这两列是日期型:
ba_data <- read_excel(choose.files(), na = "-9", col_types = list(STARTED = "date", LASTDATA = "date"))
转换完成后,运行以下代码验证结果:
head(ba_data[, c("STARTED", "LASTDATA")]) str(ba_data[, c("STARTED", "LASTDATA")])
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

