使用as.Date()转换带月份缩写的字符串为日期时出现<NA>如何解决?
解决带有月份缩写的日期字符串转Date类型问题
问题根源
你用as.Date(dates, format="%m/%d/%y")转换后全为<NA>,核心原因是格式符与实际日期字符串格式不匹配:
%m代表数字形式的月份(01-12),但你的dates列是英文月份缩写(如Jan、Feb),两者不对应,导致解析失败。
解决方案
方法1:匹配正确的格式符
根据dates列的实际格式,选择对应格式符:
- 若格式为
Jan 25 2023(缩写月+日+四位年):用%b %d %Y - 若格式为
25 Jan 2023(日+缩写月+四位年):用%d %b %Y - 若格式为
January 25 2023(全称月+日+四位年):用%B %d %Y
示例代码(假设格式为Jan 25 2023):
library(dplyr) # 筛选非空行并转换日期 df <- df %>% filter(!is.na(dates), dates != "") %>% mutate(DATE = as.Date(dates, format = "%b %d %Y"))
方法2:用lubridate自动识别格式(更省心)
如果不确定具体格式,使用lubridate包的parse_date_time函数,它能自动识别多种常见日期格式:
library(dplyr) library(lubridate) df <- df %>% filter(!is.na(dates), dates != "") %>% # 自动识别包含月份缩写的格式 mutate(DATE = parse_date_time(dates, orders = c("bdy", "dby", "mdy", "ymd"))) %>% # 可选:转成纯Date类型(parse_date_time默认返回POSIXct) mutate(DATE = as.Date(DATE))
内容的提问来源于stack exchange,提问作者siddharthaUD
相关产品推荐
相关产品推荐

