当我尝试使用as.Date强制将字符串强制转换时,R返回NA

时间:2018-01-20 06:24:19

标签: r date locale

我正在尝试将"March 15, 2017"转换为日期。 as.Date("March 15, 2017", "%B %d, %Y")并返回NA 我觉得语法很合适,问题是什么?

1 个答案:

答案 0 :(得分:2)

你很近,但被你的语言环境咬了。如果您查看%B Full month name in the current locale. (Also matches abbreviated name on input.) 的文档,您会注意到

> as.Date("March 15, 2017", "%B %d, %Y")
[1] NA

> Sys.getlocale()
[1] "LC_COLLATE=Slovenian_Slovenia.1250;LC_CTYPE=Slovenian_Slovenia.1250;LC_MONETARY=Slovenian_Slovenia.1250;LC_NUMERIC=C;LC_TIME=Slovenian_Slovenia.1250"

由于斯洛文尼亚语没有英文月份名称,我的系统也是如此:

> Sys.setlocale(locale = "English")
[1] "LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252"
> as.Date("March 15, 2017", "%B %d, %Y")
[1] "2017-03-15"

您可以做的是更改区域设置,可能仅在转换期间更改。

> Sys.setlocale(locale = "Slovenian")
[1] "LC_COLLATE=Slovenian_Slovenia.1250;LC_CTYPE=Slovenian_Slovenia.1250;LC_MONETARY=Slovenian_Slovenia.1250;LC_NUMERIC=C;LC_TIME=Slovenian_Slovenia.1250"
> as.Date("March 15, 2017", "%B %d, %Y")
[1] NA

然后恢复正常

> as.Date("Marec 15, 2017", "%B %d, %Y")
[1] "2017-03-15"

但如果我在3月使用斯洛文尼亚名字:

?Sys.setlocale

区域设置名称取决于您的操作系统,有关详细信息,请参阅 var request = URLRequest(url: URL(string: "url")!) request.timeoutInterval = 2.0 request.httpMethod = "POST" request.setValue("header", forHTTPHeaderField: "Authorization") socket = WebSocket(request: request) socket.delegate = self socket.connect()