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
相关产品推荐
相关产品推荐

