Обычно я бы сказал, что вы должны преобразовать столбец arrival_time
в соответствующий класс, который знает о времени, например, класс times
из пакета chron
. К сожалению, ваше время не нормальное, потому что у вас есть некоторые за пределами 23:59:59
, поэтому стандартный класс times
не будет работать.
Вместо этого мы разделим столбец на часы, минуты и секунды и отсортируем по ним:
library(tidyr)
res = separate(df, col = arrival_time, into = c("h", "m", "s"), remove = FALSE, convert = TRUE)
res = with(res, res[order(stop_id, h, m, s), ])
res
# stop_id arrival_time h m s
# 1 12893 5:19:49 5 19 49
# 12 12893 5:49:49 5 49 49
# 2 12893 6:20:31 6 20 31
# 3 12893 6:50:31 6 50 31
# 4 12893 7:20:31 7 20 31
# 5 12893 7:50:31 7 50 31
# 6 12893 8:20:31 8 20 31
# 7 12893 8:50:31 8 50 31
# 8 12893 9:04:49 9 4 49
# 9 12893 10:04:49 10 4 49
# 10 12893 11:04:49 11 4 49
# 11 12893 12:04:49 12 4 49
# 13 12893 13:04:49 13 4 49
# ...