在 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=""))
我们在 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=""))