R语言转换Excel导入的混合格式日期为%Y-%m-%d标准格式问题
R异构日期格式统一转换方案
实现思路
- 首先对
date_first字段的内容做类型判断:仅由数字组成的内容按Excel日期序列处理,包含/的内容按%d/%m/%Y格式的字符串日期处理 - Excel日期序列转换时需指定基准日期
origin = "1899-12-30",匹配Windows版Excel默认的日期计数规则
实现代码
tidyverse方案(推荐)
library(dplyr) library(lubridate) # 读入示例数据 data <- data.frame(date_all=c(NA,"38169","37926","01/03/2004 --- 01/03/2004"), date_first=c(NA,"38169","37926","01/03/2004")) # 转换日期 data_clean <- data %>% mutate( date_clean = case_when( is.na(date_first) ~ NA_Date_, grepl("^\\d+$", date_first) ~ as.Date(as.numeric(date_first), origin = "1899-12-30"), grepl("/", date_first) ~ dmy(date_first) ) )
基础R方案
# 读入示例数据 data <- data.frame(date_all=c(NA,"38169","37926","01/03/2004 --- 01/03/2004"), date_first=c(NA,"38169","37926","01/03/2004")) # 初始化结果列 data$date_clean <- as.Date(NA) # 处理Excel数字序列 num_idx <- grepl("^\\d+$", data$date_first) & !is.na(data$date_first) data$date_clean[num_idx] <- as.Date(as.numeric(data$date_first[num_idx]), origin = "1899-12-30") # 处理%d/%m/%Y格式字符串 str_idx <- grepl("/", data$date_first) & !is.na(data$date_first) data$date_clean[str_idx] <- as.Date(data$date_first[str_idx], format = "%d/%m/%Y")
输出验证
运行代码后得到的结果和期望输出完全一致:
> data_clean date_all date_first date_clean 1 <NA> <NA> <NA> 2 38169 38169 2004-07-01 3 37926 37926 2003-11-01 4 01/03/2004 --- 01/03/2004 01/03/2004 2004-03-01
内容的提问来源于stack exchange,提问作者MCS
相关产品推荐
相关产品推荐

