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

将字符型日期转换为日期格式,避免转换后出现NA值

解决混合格式日期转换的问题

你的问题出在直接把所有值转成numeric时,字符串格式的日期会被强制转成NA。得区分两种格式分别处理:一种是Excel的数字日期,另一种是日-月-年格式的字符串日期。

先看你的数据,目标列是Last prescription/or progression time (if progressed),先简化列名方便操作:

# 重命名列(可选,方便后续代码书写)
colnames(sg2)[1] <- "date_col"

方法一:Base R 实现

用ifelse判断每个值是否能转成数字,分别处理:

sg2$date_col <- ifelse(
  # 判断是否为数字格式的日期(抑制转换警告,非数字会返回NA)
  suppressWarnings(!is.na(as.numeric(sg2$date_col))),
  # 数字格式转日期(Excel标准原点为1899-12-30)
  as.Date(as.numeric(sg2$date_col), origin = "1899-12-30"),
  # 字符串格式转日期,匹配日-月-年的格式
  as.Date(sg2$date_col, format = "%d-%m-%Y")
)

方法二:dplyr + lubridate 实现(更简洁)

用case_when分情况判断,结合lubridate的dmy函数自动解析日-月-年格式:

library(dplyr)
library(lubridate)

sg2 <- sg2 %>%
  mutate(
    date_col = case_when(
      # 匹配纯数字的Excel日期字符串
      str_detect(date_col, "^\\d+$") ~ as.Date(as.numeric(date_col), origin = "1899-12-30"),
      # 其他情况按日-月-年解析
      TRUE ~ dmy(date_col)
    )
  )

验证转换结果:

sg2$date_col
# 输出示例:
# [1] "2021-11-23" "2022-09-28" "2023-01-01" "2023-03-01" "2023-05-23"

注意点

  • 若转换结果偏差,可尝试将日期原点改为1900-01-01(部分Excel版本的日期基准不同);
  • 若存在其他格式的日期,需在判断逻辑中补充对应的转换规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:35:58