从字符到日期/时间的转换返回NA

时间:2015-04-10 14:08:33

标签: r posixct

我经常使用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的输入太长了?什么时候太长了解决方案呢?

2 个答案:

答案 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"

非常感谢你们,周末愉快!