使用as.Date转换"March 15, 2017"为日期时返回NA的问题求助
解决as.Date转换英文日期返回NA的问题
这个问题我碰到过好多次啦!问题其实不在你的格式字符串%B %d, %Y(它确实是对的),而是R的**区域设置(locale)**在搞鬼~
为什么会返回NA?
当你的系统默认locale是中文(或者其他非英文语言)时,as.Date()会按照当前区域的月份名称规则去解析字符串,自然认不出"March"这种英文月份名称,所以返回了NA。
两种解决办法
方法1:临时修改locale适配英文日期
你可以先临时把时间相关的locale改成英文,转换完成后再恢复原来的设置,避免影响其他操作:
# 保存当前的时间locale设置 old_locale <- Sys.getlocale("LC_TIME") # 设置为英文(不同系统写法略有差异,不行的话换下面的备选) Sys.setlocale("LC_TIME", "English") # Windows备选:Sys.setlocale("LC_TIME", "English_United States.1252") # Linux/macOS备选:Sys.setlocale("LC_TIME", "en_US.UTF-8") # 现在转换日期就正常了 as.Date("March 15, 2017", "%B %d, %Y") # 转换完成后恢复原来的locale Sys.setlocale("LC_TIME", old_locale)
方法2:用lubridate包简化操作
如果经常处理各种格式的日期,推荐使用lubridate包,它的mdy()函数可以直接识别"月-日-年"这种英文格式,完全不用管locale:
# 首次使用先安装包 install.packages("lubridate") library(lubridate) # 直接转换,一步到位 mdy("March 15, 2017")
内容的提问来源于stack exchange,提问作者B.LIANG
相关产品推荐
相关产品推荐

