使用dplyr和lubridate进行奇怪的时间排序
我试图订购带有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
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
理解为“按顺序放置元素”,而不是“这些元素应该是什么级别”。