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

In R, sort column with "HH:MM AM/PM" values

我们在 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 是 earliest/latest 时间。在下面的示例中,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=""))