在 R 中,使用"HH:MM AM/PM"值对列进行排序



我们在R数据框中有一个列,看起来像下面的数据框,我们希望按照这些值对数据框进行排序:

zed = data.frame(start_time = c("12:10 PM", "10:10 PM", "01:15 PM", "03:10 PM", "03:37 PM", "03:40 PM", 
"06:05 PM", "06:40 AM", "07:05 PM", "07:05 PM", "07:07 PM", "07:10 PM", 
"07:10 PM", "08:05 PM", "08:05 PM", "08:10 PM", "01:10 PM", "01:10 PM", 
"01:15 PM", "03:10 AM", "03:37 PM", "03:40 PM", "06:05 PM", "06:40 PM", 
"07:05 PM", "07:05 PM", "07:07 AM", "07:10 AM", "07:10 PM", "08:05 PM", 
"08:05 AM", "09:10 AM"), stringsAsFactors = FALSE)
> head(zed)
start_time
1   12:10 PM
2   10:10 PM
3   01:15 PM
4   03:10 PM
5   03:37 PM
6   03:40 PM

以12:00AM为最早/最晚时间。在下面的示例中,03:10 AM将是第一个值,10:10 PM将是最后一个值。这是可能做在R与dplyr/tidyverse?如果我们可以将字符串排序或将数字排序为整数,则不一定需要将这些转换为日期时间类型。如果我们能把这个列转换成另一个更容易排序的列,那就太好了。

转换为日期时间然后排序更容易。没有理由重新发明轮子。

r .基地

zed[order(as.POSIXct(zed$start_time, "%I:%M %p", tz="")), ]

dplyr

library(dplyr)
zed %>% arrange(as.POSIXct(start_time, "%I:%M %p", tz=""))

最新更新