我经常使用as.POSIXct
将字符转换为POSIXct
,但有时会得到NA
而我不知道为什么。例如:
DATE <- "Fri Apr 10 11:57:47 2015"
DATE_in_posix <- as.POSIXct(DATE, format="%a %b %d %H:%M:%S %Y")
我也试过了:
DATE_in_posix <- as.POSIXct(DATE, format="%a %h %d %H:%M:%S %Y")
但两者的结果总是如此:
> DATE_in_posix
[1] NA
也许as.POSIXct
的输入太长了?什么时候太长了解决方案呢?
答案 0 :(得分:4)
可能是因为“Fri”和“Apr”不是您所在地区的正确缩写。
使用Sys.setlocale("LC_TIME", locale)
将R会话的语言环境设置为能够正确解释英语缩写的语言环境。请参阅?Sys.setlocale
的示例部分,了解如何在上述函数调用中指定locale
。
例如,在我的Ubuntu机器上它将是:
> Sys.setlocale("LC_TIME", "en_US.UTF-8")
> as.POSIXct("Fri Apr 10 11:57:47 2015", format="%a %b %d %H:%M:%S %Y")
[1] "2015-04-10 11:57:47 CDT"
答案 1 :(得分:1)
非常感谢Henrik !!!
我改变了这样的LC_TIME类别,现在它可以正常工作
Sys.getlocale(category = "LC_TIME")
[1] "German_Germany.1252"
Sys.setlocale("LC_TIME", "English")
[1] "English_United States.1252"
DATE_in_posix<-as.POSIXct(DATE,format="%a %b %d %H:%M:%S %Y")
> DATE_in_posix
[1] "2015-04-10 11:57:47 CEST"
和strptime现在当然也有效
DATE_in_posix<-strptime(DATE,format="%a %b %d %H:%M:%S %Y")
> DATE_in_posix
[1] "2015-04-10 11:57:47 CEST"
非常感谢你们,周末愉快!