gpt4 book ai didi

r - strptime 无法识别 %b/%B?

转载 作者:行者123 更新时间:2023-12-04 02:04:33 25 4
gpt4 key购买 nike

我正在尝试使用 strptime 转换 R 中的一些日期。我读过 this thread并设置了我的语言环境,以便它应该工作。例如:

> Sys.getlocale("LC_TIME")
[1] "en_GB"
> format(Sys.time(), format="%B")
[1] "November"

但是,如果我尝试转换月份字符串,strptime 将返回 NA,例如:

> strptime("November", format="%B")
[1] NA

我可以毫无问题地运行上面链接中的示例,但如果我简化示例以仅包含月份,我将再次获得 NA。

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

这是怎么回事?如何将字符月份解析为日期对象?

编辑感谢您的评论。澄清一下,这也行不通:

> strptime("November 2011", format="%B %Y")
[1] NA

我还希望 strptime 用当前系统时间填充任何缺失的字段,如 strptime("2011", format="%Y")

最佳答案

我对 R 在 strptime 中缺少值时的行为感到有点困惑。文档足够清楚:

For strptime the input string need not specify the date completely: it is assumed that unspecified seconds, minutes or hours are zero, and an unspecified year, month or day is the current one. Some components may be returned as NA (but an unknown tzone component is represented by an empty string).

但月份似乎并不总是如此。这是一个特别奇怪的例子:

strptime('Nov-01', '%B-%d')
[1] "2014-11-01"
strptime('2009-Nov', '%Y-%B')
[1] NA

基于上述内容的一个明显的解决方法是制作一个简单的函数。

convert.months <- function(x) 
strptime(paste(x,strftime(Sys.time(),'%d')), '%b %d')

这很丑陋,但它有效:

convert.months(c("Nov","Dec"))
[1] "2014-11-18 EST" "2014-12-18 EST"

这里要明确的是测试用例,根据我对文档的解释,它们应该都可以工作:

strptime('11', '%m') # Fail
strptime('11-01', '%m-%d') # Works
strptime('2009-11', '%Y-%m') # Fail

strptime('Nov', '%b') # Fail
strptime('Nov-01', '%b-%d') # Works
strptime('2009-Nov', '%Y-%b') # Fail

关于r - strptime 无法识别 %b/%B?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26997864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com