在R中将readxl读取Excel得到的数值转换回Date对象的相关问题
日期序列值还原方法
你看到的44025是Excel原生的日期序列值:默认1900日期系统下1900-01-01对应数值1,以此类推,该值刚好对应2020-07-13。可按以下两种场景处理:
场景1:读取文件时直接解析为日期
在调用read_excel()时通过col_types参数指定对应列的类型为日期,避免被识别为数值:
# 方式1:按列位置指定,示例中第3列为日期列 df <- readxl::read_excel("你的文件路径.xlsx", col_types = c("text", "numeric", "date")) # 方式2:按列名批量指定,适配多日期列的场景 # 先读取表头获取列名 col_names <- names(readxl::read_excel("你的文件路径.xlsx", n_max = 0)) # 指定日期列的列名 date_cols <- c("订单日期", "发货日期") # 生成列类型配置 col_types <- ifelse(col_names %in% date_cols, "date", "guess") # 读取全量数据 df <- readxl::read_excel("你的文件路径.xlsx", col_types = col_types)
场景2:数据已读取为数值,后续转换
用as.Date()配合Excel的日期起始值转换即可,注意区分Excel的日期系统:
# 绝大多数Windows端Excel使用1900日期系统,origin固定为1899-12-30 df$日期列 <- as.Date(df$日期列, origin = "1899-12-30") # 旧版macOS Excel如果用1904日期系统,替换origin为以下值 # df$日期列 <- as.Date(df$日期列, origin = "1904-01-01")
如果需要输出与原文件一致的2020-JUL-13格式,可通过format()函数格式化:
# 临时切换时间区域为英文,保证输出英文月份缩写 Sys.setlocale("LC_TIME", "English") df$日期列 <- format(df$日期列, "%Y-%b-%d")
内容的提问来源于stack exchange,提问作者Brian Smith
相关产品推荐
相关产品推荐

