Как мне указать порядок сортировки, используя список? - PullRequest
4 голосов
/ 08 декабря 2011

Простите мое невежество, но у меня проблемы с сортировкой фрейма данных.Я хотел бы указать упорядоченный список, например c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"), при сортировке так, чтобы кадр данных сортировался в порядке списка.

В этом примере я хотел бы начать с

    Day Present Count
    Fri No  164
    Fri Yes 131
    Mon No  142
    Mon Yes 174
    Sat No  39
    Sat Yes 26
    Sun No  44
    Sun Yes 39
    Thu No  191
    Thu Yes 192
    Tue No  184
    Tue Yes 214
    Wed No  343
    Wed Yes 255

И заканчиваем

    Day Present Count
    Mon No  142
    Mon Yes 174
    Tue No  184
    Tue Yes 214
    Wed No  343
    Wed Yes 255
    Thu No  191
    Thu Yes 192
    Fri No  164
    Fri Yes 131
    Sat No  39
    Sat Yes 26
    Sun No  44
    Sun Yes 39

Я пробовал perday[do.call(order, perday[c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")]),], но у меня "выбраны неопределенные столбцы".Я получаю ту же ошибку, если в символьном векторе тоже есть 14 записей, поэтому я действительно запутался в этом моменте.

Вот результат:

perday<-structure(list(dayofweek = c("Fri", "Fri", "Mon", "Mon", "Sat", 
"Sat", "Sun", "Sun", "Thu", "Thu", "Tue", "Tue", "Wed", "Wed"
), Attended = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L, 1L, 2L, 1L, 2L), .Label = c("No", "Yes"), class = "factor"), 
    nrow = c(164L, 131L, 142L, 174L, 39L, 26L, 44L, 39L, 191L, 
    192L, 184L, 214L, 343L, 255L)), .Names = c("dayofweek", "Attended", 
"nrow"), row.names = c(NA, -14L), class = "data.frame")

Ответы [ 2 ]

8 голосов
/ 08 декабря 2011

Вы можете сделать это "inline" с

perday[order(factor(perday$dayofweek,levels=c(c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")))),]

, что дает

   dayofweek Attended nrow
3        Mon       No  142
4        Mon      Yes  174
11       Tue       No  184
12       Tue      Yes  214
13       Wed       No  343
14       Wed      Yes  255
9        Thu       No  191
10       Thu      Yes  192
1        Fri       No  164
2        Fri      Yes  131
5        Sat       No   39
6        Sat      Yes   26
7        Sun       No   44
8        Sun      Yes   39
0 голосов
/ 08 мая 2012

Не знаю почему, но это не изменило порядок моего фрейма данных.

Вместо этого сделал следующий код:

   dfordered=df[c(1,2,3,9,5,6,8,10,11,4,7),]

Обратите внимание, что вам просто нужно изменить исходный порядок строк в вашей df.

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