2016-01-13 73 views
3

我想在河至订单日期我有一些字符串看起来像这样问题r中订购日期

jnk <- c("2016-01-12T10:54:41Z", "2016-01-12T12:40:30Z", "2016-01-12T14:59:22Z", 
     "2016-01-12T15:55:10Z", "2015-03-29T02:56:42Z", "2015-03-29T02:40:56Z") 

所以我strptime

jnk2 <- strptime(jnk, "%Y-%m-%dT%H:%M:%SZ") 

格式化当我现在尝试订购他们,2015年的两个日期将永远在最后...

order(jnk2) 

[1] 1 2 3 4 5 6

我错过了什么吗?我期望为了6, 5, 1, 2, 3, 4

+0

我不知道为什么,但2015年的字符串没有CET作为时区。可能值得调查? – Heroka

+0

运行'strptime(c(“2015-03-29 01:30:00”,“2015-03-29 02:00:00”,“2015-03-29 02:30:00”,“2015-03 -29 03:00:00“),”%Y-%m-%d%H:%M:%S“)与德国语言环境,你应该能够猜测为什么中间的值没有时区。 – Roland

+0

如果我不能......这是否意味着我很愚蠢?我真的不明白,即使是德语区域:-) – drmariod

回答

8

我有同样的问题,直到我所定义的时间段(例如tz="GMT"):

jnk <- c("2016-01-12T10:54:41Z", "2016-01-12T12:40:30Z", "2016-01-12T14:59:22Z", 
     "2016-01-12T15:55:10Z", "2015-03-29T02:56:42Z", "2015-03-29T02:40:56Z") 

jnk2 <- strptime(jnk, "%Y-%m-%dT%H:%M:%SZ", tz="GMT") 
order(jnk2) 

[1] 6 5 1 2 3 4

+0

不错,但你有一个想法,为什么发生这种情况?!无法看到与其他字符串相比的区别... – drmariod

+0

不确定,但由于某种原因,最后两次在'strptime'后没有关联的'tz'。 –

+0

@drmariod我从表面上进行了调查。 'order'不是泛型的,它调用通用的'xtfrm',然后调用'xtfrm.POSIXlt'。似乎后一个函数通过'as.double(x)'简化了参数。因此,我们有效地结束了调用'order(as.double(jnk2))',这给出了错误的顺序。为什么这个功能只是转换我不知道。 –