簡體   English   中英

strptime、as.POSIXct 和 as.Date 返回意外的 NA

[英]strptime, as.POSIXct and as.Date return unexpected NA

當我嘗試按以下格式解析時間戳時:“Thu Nov 8 15:41:45 2012”,只返回NA

我使用的是 Mac OS X、R 2.15.2 和 Rstudio 0.97.237。 我的操作系統的語言是荷蘭語:我認為這與它有關。

當我嘗試strptime ,返回NA

var <- "Thu Nov 8 15:41:45 2012"
strptime(var, "%a %b %d %H:%M:%S %Y")
# [1] NA

as.POSIXct不起作用:

as.POSIXct(var, "%a %b %d %H:%M:%S %Y")
# [1] NA

我也在上面的字符串上嘗試了as.Date但沒有%H:%M:%S組件:

as.Date("Thu Nov 8 2012", "%a %b %d %Y")
# [1] NA

任何想法我可能做錯了什么?

我認為正如您所猜測的那樣,由於您的語言環境, strptime無法解析您的日期時間字符串。 您的字符串包含縮寫的工作日 ( %a ) 和縮寫的月份名稱 ( %b )。 這些時間規范在?strptime中描述:

細節

%a :此平台上當前語言環境中的縮寫工作日名稱

%b此平台上當前語言環境中的縮寫月份名稱。

“請注意,縮寫名稱是特定於平台的(盡管標准規定在C語言環境中它們必須是大寫英文名稱的前三個字母:”

“如果您希望使用%a%b%h作為輸入格式的一部分,了解縮寫是必不可少的:請參閱示例以了解如何檢查。”

也可以看看

[...] locales來查詢或設置區域設置。

locales的問題也與as.POSIXctas.POSIXltas.Date

?as.POSIXct

細節

如果format指定,請記住某些格式規范的特定語言環境,你可能需要設置LC_TIME通過適當的類別Sys.setlocale 這通常會影響%b%B (月份名稱)和%p (AM/PM)的使用。

?as.Date

細節

在適當和可用的情況下使用特定於語言環境的字符串轉換。 這會影響日期和月份的名稱。


因此,如果字符串中的工作日和月份名稱與當前語言環境中的不同,則strptimeas.POSIXctas.Date無法正確解析字符串並返回NA

但是,您可以通過更改locales來解決此問題:

# First save your current locale
loc <- Sys.getlocale("LC_TIME")

# Set correct locale for the strings to be parsed
# (in this particular case: English)
# so that weekdays (e.g "Thu") and abbreviated month (e.g "Nov") are recognized
Sys.setlocale("LC_TIME", "en_GB.UTF-8")
# or
Sys.setlocale("LC_TIME", "C") 

#Then proceed as you intended
x <- "Thu Nov 8 15:41:45 2012" 
strptime(x, "%a %b %d %H:%M:%S %Y")
# [1] "2012-11-08 15:41:45"

# Then set back to your old locale
Sys.setlocale("LC_TIME", loc) 

使用我的個人語言環境,我可以重現您的錯誤:

Sys.setlocale("LC_TIME", loc)
# [1] "fr_FR.UTF-8"

strptime(var,"%a %b %d %H:%M:%S %Y")
# [1] NA

只是在處理同樣的問題,發現這個解決方案更干凈,因為不需要手動更改任何系統設置,因為在lubridate包中有一個包裝函數在做這個工作,你所要做的就是設置參數locale

date <- c("23. juni 2014", "1. november 2014", "8. marts 2014", "16. juni 2014", "12. december 2014", "13. august 2014")
df$date <- dmy(df$Date, locale = "Danish")
[1] "2014-06-23" "2014-11-01" "2014-03-08" "2014-06-16" "2014-12-12" "2014-08-13"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM