[英]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.POSIXct
、 as.POSIXlt
和as.Date
。
從?as.POSIXct
:
細節
如果
format
指定,請記住某些格式規范的特定語言環境,你可能需要設置LC_TIME
通過適當的類別Sys.setlocale
。 這通常會影響%b
、%B
(月份名稱)和%p
(AM/PM)的使用。
從?as.Date
:
細節
在適當和可用的情況下使用特定於語言環境的字符串轉換。 這會影響日期和月份的名稱。
因此,如果字符串中的工作日和月份名稱與當前語言環境中的不同,則strptime
、 as.POSIXct
和as.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.