将“模糊”因子转换为Posixct值

时间:2014-09-10 20:09:49

标签: r

这是一个带有一些日期的摘录。

df<-structure(c(2L, 3L, 1L, 4L, 5L), .Label = c("05JUL2014:00:00:00", 
"07FEB2014:00:00:00", "10JUL2012:00:00:00", "19APR1998:00:00:00", 
"22DEC2010:00:00:00"), class = "factor")

我想将其转换为Date或Posixct。

我试过这个:

as.POSIXct(df,"%d%b%Y:%H:%M:%S")

但它似乎不是一个好的解决方案。任何人都可以告诉我我的错误吗?

编辑:我也试过了:

as.POSIXct(df, format = "%d%b%Y:%H:%M:%S")

但我获得了

NA NA NA NA

重新编辑:

as.POSIXct("07FEB2014:00:00:00", format = "%d%b%Y:%H:%M:%S")

返回

NA

as.POSIXct("072014:00:00:00", format = "%d%Y:%H:%M:%S")

返回

"2014-09-07 CEST"

%b似乎不理解“FEB”,我的电脑使用“法语”Locale ...(但它似乎也不了解FEV或JAN(而不是FEB和JAN)

最后?修改

我通过使用此功能找到了解决方案:

 Sys.setlocale("LC_TIME", "C")

我真的不明白为什么,但似乎没问题。

THKS

1 个答案:

答案 0 :(得分:0)

您正在将LOCALE环境设置为通用“C”,这可能默认为英语月份:

在使用strptime或as.POSIXct之前需要转换为章程:

dfc <- as.character(df)
as.POSIXct(dfc, format="%d%B%Y:%H:%M:%S")
[1] "2014-02-07 PST" "2012-07-10 PDT" "2014-07-05 PDT" "1998-04-19 PDT"
[5] "2010-12-22 PST"

> Sys.getlocale()
[1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8"