You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中无需辅助列过滤并统一转换数据库中的多种日期类型

无需辅助列统一转换多种日期格式

可以利用dplyr::case_when()函数,直接根据date列的特征区分三类数据,一次性完成转换,不需要依赖虚构的value列:

library(dplyr)

data_a <- read.csv(text = "
year,date,value
2018,43238,1
2017,43267,2
2020,7/25,3
2018,,4
2013,,5
2000,8/23,6
2000,9/21,7")

data_final <- data_a %>%
  mutate(data_formatted = case_when(
    # 处理Excel导出的日期数字:匹配纯数字格式且非空的date
    !is.na(date) & grepl("^\\d+$", date) ~ as.Date(as.numeric(date), origin = "1899-12-30"),
    # 处理缺失年份的不完整日期:匹配含/的月日格式且非空的date
    !is.na(date) & grepl("/", date) ~ as.Date(paste0(year, "/", date)),
    # 处理空值或其他异常情况
    TRUE ~ as.Date(NA)
  ))

逻辑说明

  • Excel日期数字:通过grepl("^\\d+$", date)识别纯数字格式的date,转换为数值后用as.Date()结合Excel的起始日期1899-12-30完成转换。
  • 不完整日期:通过grepl("/", date)识别月/日格式的date,拼接year列后转换为标准日期。
  • 空值/缺失日期:剩余所有情况直接赋值为NA(日期类型)。

验证结果

运行代码后,data_final$date_formatted列会得到统一的标准日期类型:

> data_final$date_formatted
[1] "2018-05-30" "2017-06-28" "2020-07-25" NA           NA           "2000-08-23" "2000-09-21"

内容的提问来源于stack exchange,提问作者Giuseppe Petri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 02:25:19