2011-12-28 2 views
0

У меня есть фактор-переменная, которая состоит из раз. Когда я пытаюсь превратить его в фактор, R заказывает их в порядке от самого низкого до самого высокого. Unforunately, это означает, что я в конечном итоге с чем-то вроде следующего:Сортировка вектора по времени

1:48:55 1:53:11 1:58:18 10:04:01 10:12:45 10:14:16 
10:20:24 10:21:59 10:23:11 10:23:40 10:30:40 10:34:13 
10:39:47 10:54:33 10:58:43 3:21:59 3:27:38 3:37:58 
3:49:00 4:20:42 4:30:52 4:37:39 4:40:08 4:40:55 
4:42:25 5:03:25 5:10:30 5:10:49 5:12:39 5:14:20 

Таким образом, вместо печатания раз в порядке, раз с 10:00 прийти до 7:00.

Есть ли быстрый способ заказать время по фактическому времени?

time = c("1:48:55", "1:53:11", "1:58:18", "10:04:01", "10:12:45", "10:14:16", "10:20:24", "10:21:59", "10:23:11", "10:23:40", "10:30:40", "10:34:13", "10:39:47", "10:54:33", "10:58:43", "3:21:59", "3:27:38", "3:37:58", "3:49:00", "4:20:42", "4:30:52", "4:37:39", "4:40:08", "4:40:55", "4:42:25", "5:03:25", "5:10:30", "5:10:49", "5:12:39", "5:14:20") 

time = factor(time) 

ответ

3

Попробуйте это:

library(chron) 
sort(times(time)) 

или, если вы хотите отсортированный вектор оставаться фактором:

time[order(times(time))] 
2

детали в порядке, они находятся, так что вы используете factor они будут оставаться в таком порядке, но вы можете установить уровни таким образом, что позволили бы регрессия сообщать о них «должным образом». mixedsort функция в gtools сортирует такие векторы символов, как и ожидалось:

require(gtools) 
mixedsort(time) 
[1] "1:48:55" "1:53:11" "1:58:18" "3:21:59" "3:27:38" "3:37:58" "3:49:00" "4:20:42" "4:30:52" 
[10] "4:37:39" "4:40:08" "4:40:55" "4:42:25" "5:03:25" "5:10:30" "5:10:49" "5:12:39" "5:14:20" 
[19] "10:04:01" "10:12:45" "10:14:16" "10:20:24" "10:21:59" "10:23:11" "10:23:40" "10:30:40" "10:34:13" 
[28] "10:39:47" "10:54:33" "10:58:43" 

> time=factor(time, levels= mixedsort(time)) 
> levels(time) 
[1] "1:48:55" "1:53:11" "1:58:18" "3:21:59" "3:27:38" "3:37:58" "3:49:00" "4:20:42" "4:30:52" 
[10] "4:37:39" "4:40:08" "4:40:55" "4:42:25" "5:03:25" "5:10:30" "5:10:49" "5:12:39" "5:14:20" 
[19] "10:04:01" "10:12:45" "10:14:16" "10:20:24" "10:21:59" "10:23:11" "10:23:40" "10:30:40" "10:34:13" 
[28] "10:39:47" "10:54:33" "10:58:43" 
> time 
[1] 1:48:55 1:53:11 1:58:18 10:04:01 10:12:45 10:14:16 10:20:24 10:21:59 10:23:11 10:23:40 10:30:40 
[12] 10:34:13 10:39:47 10:54:33 10:58:43 3:21:59 3:27:38 3:37:58 3:49:00 4:20:42 4:30:52 4:37:39 
[23] 4:40:08 4:40:55 4:42:25 5:03:25 5:10:30 5:10:49 5:12:39 5:14:20 
30 Levels: 1:48:55 1:53:11 1:58:18 3:21:59 3:27:38 3:37:58 3:49:00 4:20:42 4:30:52 4:37:39 ... 10:58:43 

Если вы хотите, чтобы получить отсортированы значения времени вам нужно будет выбрать класс времени для работы. Пакет кроновая является одним из возможных вариантов:

time = c("1:48:55", "1:53:11", "1:58:18", "10:04:01", "10:12:45", "10:14:16", "10:20:24", "10:21:59", "10:23:11", "10:23:40", "10:30:40", "10:34:13", "10:39:47", "10:54:33", "10:58:43", "3:21:59", "3:27:38", "3:37:58", "3:49:00", "4:20:42", "4:30:52", "4:37:39", "4:40:08", "4:40:55", "4:42:25", "5:03:25", "5:10:30", "5:10:49", "5:12:39", "5:14:20") 

> chron(times=time) 
[1] 01:48:55 01:53:11 01:58:18 10:04:01 10:12:45 10:14:16 10:20:24 10:21:59 10:23:11 10:23:40 10:30:40 
[12] 10:34:13 10:39:47 10:54:33 10:58:43 03:21:59 03:27:38 03:37:58 03:49:00 04:20:42 04:30:52 04:37:39 
[23] 04:40:08 04:40:55 04:42:25 05:03:25 05:10:30 05:10:49 05:12:39 05:14:20 
> sort(chron(times=time)) 
[1] 01:48:55 01:53:11 01:58:18 03:21:59 03:27:38 03:37:58 03:49:00 04:20:42 04:30:52 04:37:39 04:40:08 
[12] 04:40:55 04:42:25 05:03:25 05:10:30 05:10:49 05:12:39 05:14:20 10:04:01 10:12:45 10:14:16 10:20:24 
[23] 10:21:59 10:23:11 10:23:40 10:30:40 10:34:13 10:39:47 10:54:33 10:58:43 
+0

Краткое добавление: Обратите внимание, что факторы по определению беспорядочны! Однако, поскольку у R есть все, что вам нужно, существует тип данных 'order', который является всего лишь фактором с определенным порядком. Если вы замените 'factor' на' order' в ответе DWins, ваши типы данных будут более значимыми (хотя, если вы покажете только фактор, заметной разницы не будет. В некоторых статистических методах это будет, однако). – Thilo

+1

Мой опыт работы с упорядоченными факторами заключается в том, что они сеют путаницу повсюду, куда бы они ни пошли, поэтому я не рекомендую их новичкам. –

Смежные вопросы