使用dplyr和lubridate进行奇怪的时间排序

使用dplyr和lubridate进行奇怪的时间排序,r,dplyr,lubridate,R,Dplyr,Lubridate,我试图订购带有dplyr和lubridate的时间戳,但我没有得到预期的订购 library(lubridate);library(dplyr) foo <- data.frame(time = ymd_hms(c("2016-08-31 13:40:00", "2016-08-31 06:40:00", "2016-08-31 10:40:00")), expected_order = c(3,1,2)) foo %>% mutat

我试图订购带有dplyr和lubridate的时间戳,但我没有得到预期的订购

library(lubridate);library(dplyr)

foo <- data.frame(time = ymd_hms(c("2016-08-31 13:40:00", "2016-08-31 06:40:00", "2016-08-31 10:40:00")), 
                      expected_order = c(3,1,2)) 
foo %>% mutate(dplyr_ordered = order(time))
库(lubridate);图书馆(dplyr)
foo%变异(dplyr_顺序=顺序(时间))

没有什么奇怪的事情发生,只是您希望行号列在
dplyr\u ordered

foo$time
#> [1] "2016-08-31 13:40:00 UTC" "2016-08-31 06:40:00 UTC" "2016-08-31 10:40:00 UTC"

order(foo$time)
#> [1] 2 3 1

正如所料,
foo$time
2
项排在第一位,然后是
3
,然后是
1
,没有什么奇怪的事情发生,只是您希望行号列在
dplyr\u顺序中

foo$time
#> [1] "2016-08-31 13:40:00 UTC" "2016-08-31 06:40:00 UTC" "2016-08-31 10:40:00 UTC"

order(foo$time)
#> [1] 2 3 1

正如所料,
foo$time
2
项是第一个顺序,然后是
3
,然后是
1
,您混淆了
顺序
等级
的作用,从
顺序

order返回一个排列,将其第一个参数重新排列为 升序或降序

order
不返回实际值的秩,而是返回可用于对向量排序的索引向量,比较以下结果:

foo %>% mutate(dplyr_order = order(time), dplyr_rank = rank(time))

#                  time expected_order dplyr_order dplyr_rank
# 1 2016-08-31 13:40:00              3           2          3
# 2 2016-08-31 06:40:00              1           3          1
# 3 2016-08-31 10:40:00              2           1          2

rank
的结果正是您所期望的。顺序的结果告诉您时间上的第二个元素最小,第三个元素紧随其后,第一个元素最大。

您混淆了顺序和等级的作用,顺序是:

order返回一个排列,将其第一个参数重新排列为 升序或降序

order
不返回实际值的秩,而是返回可用于对向量排序的索引向量,比较以下结果:

foo %>% mutate(dplyr_order = order(time), dplyr_rank = rank(time))

#                  time expected_order dplyr_order dplyr_rank
# 1 2016-08-31 13:40:00              3           2          3
# 2 2016-08-31 06:40:00              1           3          1
# 3 2016-08-31 10:40:00              2           1          2

rank
的结果正是您所期望的。来自
order
的结果告诉您,时间上的第二个元素最小,第三个元素紧随其后,第一个元素最大。

我希望它是3,1,2查看
foo$time
。将
order
理解为“按顺序放置元素”,而不是“这些元素应该是什么级别”。我希望它是3,1,2查看
foo$time
,如我所示。将
order
理解为“按顺序放置元素”,而不是“这些元素应该是什么级别”。