strtime、as.POSIXct和as.Date返回意外的NA
当我尝试以以下格式解析时间戳:“Thu Nov 8 15:41:45 2012”时,只返回strtime、as.POSIXct和as.Date返回意外的NA,r,macos,datetime,strptime,r-faq,R,Macos,Datetime,Strptime,R Faq,当我尝试以以下格式解析时间戳:“Thu Nov 8 15:41:45 2012”时,只返回NA 我使用的是MacOSX、R2.15.2和Rstudio 0.97.237。我的操作系统语言是荷兰语:我想这与此有关 当我尝试strtime时,返回NA: var <- "Thu Nov 8 15:41:45 2012" strptime(var, "%a %b %d %H:%M:%S %Y") # [1] NA 我还在上面的字符串上尝试了as.Date,但没有%H:%M:%S组件: as.Da
NA
我使用的是MacOSX、R2.15.2和Rstudio 0.97.237。我的操作系统语言是荷兰语:我想这与此有关
当我尝试strtime
时,返回NA
:
var <- "Thu Nov 8 15:41:45 2012"
strptime(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
你知道我可能做错了什么吗?我想这正是你所猜测的,
strtime
无法解析你的日期时间字符串,因为你所在的地区不同。您的字符串包含缩写的工作日(%a
)和缩写的月份名称(%b
)。这些时间规格在?strtime
中描述:
详细信息
%a
:此计算机上当前区域设置中的缩写工作日名称
平台
%b
:此平台上当前区域设置中的缩写月份名称
请注意,缩写名称是特定于平台的(尽管
标准规定,在C
语言环境中,它们必须是前三个
大写英文名称的字母:
“如果你想使用这些缩写,了解它们是很重要的
%a
、%b
或%h
作为输入格式的一部分:有关详细信息,请参见示例
如何检查。”
另请参见
[…]locales
查询或设置区域设置
locales
的问题也与as.POSIXct
、as.POSIXlt
和as.Date
有关
从?as.POSIXct
:
详细信息
如果指定了格式
,请记住某些格式
规范是特定于区域设置的,您可能需要设置
LC\u TIME
通过Sys.setlocale
适当分类。这是最常见的
影响%b
、%b
(月份名称)和%p
(AM/PM)的使用
从<代码>?截止日期<代码>:
详细信息
使用特定于语言环境的字符串转换
在适当和可用的情况下。这会影响天数的名称
还有几个月
因此,如果字符串中的工作日和月份名称与当前区域设置中的名称不同,
strtime
、as.POSIXct
和as.Date
无法正确解析字符串,并返回NA
但是,您可以通过更改区域设置来解决此问题:
# 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)
我想这正是您所猜测的,strtime
由于您所在的地区而无法解析日期时间字符串。您的字符串包含缩写的工作日(%a
)和缩写的月名(%b
)。这些时间规范在?strtime
中描述:
详细信息
%a
:此计算机上当前区域设置中的缩写工作日名称
平台
%b
:此平台上当前区域设置中的缩写月份名称
请注意,缩写名称是特定于平台的(尽管
标准规定,在C
语言环境中,它们必须是前三个
大写英文名称的字母:
“如果你想使用这些缩写,了解它们是很重要的
%a
、%b
或%h
作为输入格式的一部分:有关详细信息,请参见示例
如何检查。”
另请参见
[…]locales
查询或设置区域设置
locales
的问题也与as.POSIXct
、as.POSIXlt
和as.Date
有关
从?as.POSIXct
:
详细信息
如果指定了格式
,请记住某些格式
规范是特定于区域设置的,您可能需要设置
LC\u TIME
通过Sys.setlocale
适当分类。这是最常见的
影响%b
、%b
(月份名称)和%p
(AM/PM)的使用
从<代码>?截止日期<代码>:
详细信息
使用特定于语言环境的字符串转换
在适当和可用的情况下。这会影响天数的名称
还有几个月
因此,如果字符串中的工作日和月份名称与当前区域设置中的名称不同,strtime
、as.POSIXct
和as.Date
无法正确解析字符串,并返回NA
但是,您可以通过更改区域设置来解决此问题:
# 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)
我只是在处理同样的问题,发现这个解决方案更干净,因为不需要手动更改任何系统设置,因为在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"
date只是在处理同样的问题,并且发现这个解决方案更干净,因为不需要手动更改任何系统设置,因为在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"
date我无法在Ubuntu和R base上重现您的错误。另外,对我来说,strtime
创建了一个POSIXlt
而不是POSIXct
时间对象。最后,尝试使用as.POSIXct(var,format=…)
取而代之,看看你是否运气更好。我无法在Ubuntu和R base上重现你的错误。另外,对我来说,strtime
创建了一个POSIXlt
而不是POSIXct
时间对象。最后,试着改用as.POSIXct(var,format=…)
看看你是否运气更好。Regardi