我试图用strptime转换R中的一些日期.我已经阅读了这个帖子,并设置了我的语言环境,以便它可以工作.例如:
> Sys.getlocale("LC_TIME")
[1] "en_GB"
> format(Sys.time(), format="%B")
[1] "November"
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试转换月份字符串,则strptime返回NA,例如:
> strptime("November", format="%B")
[1] NA
Run Code Online (Sandbox Code Playgroud)
我可以在上面的链接上运行示例,没有任何问题,但如果我简化示例只包括月份,我再次获得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
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?如何将字符月解析为日期对象?
编辑 感谢您的评论如下.澄清一下,这也行不通:
> strptime("November 2011", format="%B %Y")
[1] NA
Run Code Online (Sandbox Code Playgroud)
我还希望strptime
用当前系统时间填写任何缺少的字段,如strptime("2011", format="%Y")
在遗漏值的情况下,我对R的行为感到有些困惑strptime
.文档很清楚:
对于strptime,输入字符串不需要完全指定日期:假设未指定的秒,分钟或小时为零,未指定的年,月或日是当前的日期.一些组件可以作为NA返回(但是未知的tzone组件由空字符串表示).
但几个月似乎并非如此.这是一个特别奇怪的例子:
strptime('Nov-01', '%B-%d')
[1] "2014-11-01"
strptime('2009-Nov', '%Y-%B')
[1] NA
Run Code Online (Sandbox Code Playgroud)
基于上述内容的一个明显的解决方法是创建一个简单的函数.
convert.months <- function(x)
strptime(paste(x,strftime(Sys.time(),'%d')), '%b %d')
Run Code Online (Sandbox Code Playgroud)
哪个很丑,但它有效:
convert.months(c("Nov","Dec"))
[1] "2014-11-18 EST" "2014-12-18 EST"
Run Code Online (Sandbox Code Playgroud)
这里要清楚的是测试用例,根据我对文档的解释,它们都应该起作用:
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
649 次 |
最近记录: |