如何在R中导入CSV内dd/mm/yyyy hh:mm格式日期并转换为短日期
R处理CSV中dd/mm/yyyy hh:mm格式日期的解决方案
导入时直接指定解析格式(推荐,适合大文件)
使用readr包读取CSV时直接指定日期列的格式,避免自动识别时日月颠倒,读取效率远高于base R内置函数,适合大体积CSV批量处理:
library(readr) # 单文件导入,将"date_col"替换为你实际的日期列名 df <- read_csv("target_file.csv", col_types = cols( date_col = col_datetime(format = "%d/%m/%Y %H:%M") ) ) # 批量导入同文件夹下所有CSV file_list <- list.files(path = "csv_folder_path", pattern = "\\.csv$", full.names = TRUE) df_list <- lapply(file_list, function(x) { read_csv(x, col_types = cols(date_col = col_datetime("%d/%m/%Y %H:%M"))) })
已导入数据的格式修正
如果数据已经导入为字符型或错误的日期格式,使用lubridate包的dmy_hm函数直接解析,无需手动拆分字符串:
library(lubridate) # 自动识别日/月/年 时:分的格式,不会出现日月颠倒问题 df$date_col <- dmy_hm(df$date_col)
导出到Excel时指定日期格式
导出时使用openxlsx包设置单元格格式,避免Excel自动修改日期显示规则:
library(openxlsx) # 先去除时分秒,仅保留日期部分 df$date_col <- as.Date(df$date_col) # 生成Excel文件 wb <- createWorkbook() addWorksheet(wb, "Sheet1") # 按需设置输出格式:dd/mm/yyyy对应4位年,dd/mm/yy对应2位年 date_style <- createStyle(numFmt = "dd/mm/yyyy") writeData(wb, "Sheet1", df) # 将列号替换为你实际的日期列所在位置 addStyle(wb, "Sheet1", style = date_style, cols = 2, rows = 2:(nrow(df)+1), gridExpand = TRUE) saveWorkbook(wb, "output_file.xlsx", overwrite = TRUE)
注意事项
- 格式占位符严格对应:
%d=日期,%m=月份,%Y=4位年份,%y=2位年份,%H=24小时制小时,%M=分钟 - 无需提前打开CSV修改格式,上述流程可以直接处理GB级别的CSV文件
- 多日期列场景下,在
col_types参数中依次添加所有日期列的格式规则即可
内容的提问来源于stack exchange,提问作者David Cook
相关产品推荐
相关产品推荐

