2014-09-10 87 views
1

這是含有某些日期的提取物。將「ambigous」因子轉換爲Posixct值

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」,我的電腦上使用 「法語」 語言環境...(但也不要似乎明白FEV或JAN(而不是FEB和JAN)

最終?編輯

我找到了一個解決方案,通過使用該功能:

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

我真的不明白爲什麼,但它似乎是確定。

THKS

+0

你幾乎就在那裏,只需要在'as.POSIXct(df,format =「%d%b%Y:%H:%M:%S」)中加'format''',否則你就傳遞'格式'到'tz'參數。或者只是'as.Date(df,「%d%b%Y:%H:%M:%S」)',因爲你在白天沒有任何實際值 – 2014-09-10 20:12:41

+0

不工作在我的電腦上我得到了不適用不適用不適用。 – 2014-09-10 20:17:30

+0

這很奇怪。你確定你已經添加了'格式'嗎?你用'as.Date'嘗試過嗎? – 2014-09-10 20:21:41

回答

0

你設置你的語言環境,以通用的「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"