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

R语言指定格式转换日期出现NA值的解决方法咨询

问题原因

你的Date_1列混合了两种日期格式:

  • 部分行是dd-mm-yyyy格式(连字符分隔,比如13-02-2014)
  • 另一部分行是dd/mm/yyyy格式(斜杠分隔,比如4/8/2011)

as.Date()默认只能指定一种匹配格式,不匹配的行就会生成NA值。

解决方案

方法1:基础R原生实现

使用as.Date()的tryFormats参数,指定多个候选格式让函数自动尝试匹配:

test_df <- data.frame(
  Id = c(1, 2, 3, 4, 5, 6, 7, 8), 
  Date_1 = c("13-02-2014", "15-03-2013", "4/8/2011", "4/9/2014", "16-02-2017", "26-02-2017", "16-02-2018", "3/3/2014")
)

# 优先匹配dd-mm-yyyy格式,失败则尝试dd/mm/yyyy格式
test_df$Final_Date <- as.Date(test_df$Date_1, tryFormats = c("%d-%m-%Y", "%d/%m/%Y"))

方法2:使用lubridate包(更简便)

lubridate包专门处理日期时间,能自动识别同顺序下的不同分隔符:

# 首次使用时安装包
install.packages("lubridate")
library(lubridate)

test_df$Final_Date <- dmy(test_df$Date_1)

dmy()函数会自动识别日-月-年顺序的日期,不管分隔符是连字符还是斜杠。

验证结果

运行上述代码后,查看test_df会发现所有行的Final_Date都已成功转换为日期类型,无NA值。

内容的提问来源于stack exchange,提问作者Data-7scientist

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 19:47:03