使用 dplyr 对 lubridate hms 进行排序

sorting lubridate hms using dplyr

我有一个字符串格式的时间 H:M:S。我想将其转换为时间格式,然后按降序对该字段进行排序。我用 lubridate 和 dplyr 尝试了以下操作,但我无法对计时器列进行排序(以 hms 为单位)。此外,在使用 lubridate 的 hms 之后,列类型变得未知。所以我不知道这是否是排序的问题,因为我也没有从 mutate 获得排名列。请看下面的例子:

s <- c("08:30:40", "09:30:40")
df <- data.frame("clock" = s)
df
#>      clock
#> 1 08:30:40
#> 2 09:30:40

# convert string to time
library(lubridate)

df$timer <- hms(df$clock)
df
#>      clock      timer
#> 1 08:30:40 8H 30M 40S
#> 2 09:30:40 9H 30M 40S


library(dplyr)

sorted_df <- df %>% arrange(desc(timer)) %>% mutate(rank = row_number())
df
#>      clock      timer
#> 1 08:30:40 8H 30M 40S
#> 2 09:30:40 9H 30M 40S

我们可以在 'timer' 上用 as.numeric 换行,然后在输出

上应用 desc
library(dplyr)
library(lubridate)
df %>% 
    arrange(desc(as.numeric(timer))) %>%
     mutate(rank = row_number())
#     clock      timer rank
#1 09:30:40 9H 30M 40S    1
#2 08:30:40 8H 30M 40S    2