我正在尝试用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))
答案 0 :(得分:3)
你混淆了order
和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
的结果告诉你时间的第二个元素是最小的,接着是第三个元素,第一个元素是最大的。
答案 1 :(得分:0)
除了您希望行号在dplyr_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
正如预期的那样,2
的{{1}}项是第一个,然后是foo$time
,然后是3
。