Как написать код в R, чтобы отсортировать значения столбца для аналогичных значений строки? - PullRequest
0 голосов
/ 29 октября 2018

Как видите, у меня есть два столбца (stop_id и время прибытия). Я должен написать код (возможно, цикл for), который сортирует значения arrival_time для того же stop_id. Например, как вы видите, для stop_id = 12893 у меня есть три значения arrival_time, которые находятся не в порядке возрастания. Это:

5:49:49;
20:34:07; and
18:51:13

Я не могу сделать это вручную, потому что у меня есть около 11 000 уникальных stop_id values. Заранее спасибо.

stop_id arrival_time
12893   5:19:49
12893   6:20:31
12893   6:50:31
12893   7:20:31
12893   7:50:31
12893   8:20:31
12893   8:50:31
12893   9:04:49
12893   10:04:49
12893   11:04:49
12893   12:04:49
12893   5:49:49
12893   13:04:49
12893   14:04:49
12893   15:21:13
12893   15:51:13
12893   16:21:13
12893   16:51:13
12893   17:21:13
12893   17:51:13
12893   18:21:13
12893   19:19:07
12893   19:49:07
12893   21:34:07
12893   22:34:07
12893   23:34:07
12893   24:45:07
12893   20:34:07
12893   18:51:13
12898   5:51:56
12898   6:22:30
12898   7:22:30
12898   7:52:30
12898   8:22:30
12898   8:52:30
12898   10:52:56
12898   11:52:56
12898   12:52:56
12898   13:52:56
12898   6:52:30
12898   9:52:56
12898   5:21:56
12898   14:52:56
12898   15:57:30
12898   16:27:30
12898   16:57:30
12898   17:27:30
12898   17:57:30
12898   18:27:30
12898   18:57:30
12898   20:22:22
12898   21:22:22
12898   22:22:22
12898   23:22:22
12898   24:22:22
12898   19:22:22
12898   15:27:30

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Обычно я бы сказал, что вы должны преобразовать столбец 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
# ...
0 голосов
/ 29 октября 2018

Вы можете использовать пакет dplyr. Например:

dplyr::arrange(dataframe, stop_id, arrival_time)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...