2016-11-21 3 views
0

У меня есть dataframe с столбцом с именем Stage. Файловый кадр генерируется из регулярно обновляемого файла excel.Пользовательский сортировка без использования коэффициента

В этой колонке должно быть только несколько значений, например «Планирование» или «Анализ», но люди иногда помещают пользовательские значения, и остановить их нецелесообразно.

Я хочу, чтобы данные были отсортированы по этому столбцу, с пользовательским порядком сортировки, который имеет смысл в хронологическом порядке (например, для нас планирование начинается до анализа). Я мог бы реализовать это с использованием факторов (например, Reorder rows using custom order), но если я использую предопределенный список факторов, я теряю любые неожиданные значения, которые люди вводят в этот столбец. Я счастлив, что неожиданные значения не будут правильно отсортированы, но я не хочу полностью их потерять.

EDIT: Ответа на этот вопрос floo0 Поразительно, но я забыл упомянуть, что я планировал barplotting результаты, что-то вроде

barplot(table(MESH_assurance_involved()[MESH_assurance_invol‌​ved_sort_order(), 'Stage']), main="Stage became involved") 

(круглые скобки, потому что эти блестящие реактивные объекты, не должны разница).

Результаты несортированы, хотя тестирование в консоли показывает, что базовые данные сортируются.

table также нарушает сортировку, но с использованием ggplot и таблицы нет. Я получаю идентичный результат.

Чтобы отобразить штрих-код, поддерживающий исходный порядок, требуется что-то вроде Ordering bars in barplot(), но все найденные мной решения требуют факторов, и смешивание их с решением здесь не работает для меня каким-то образом.

ответ

3

Игрушка данных набор:

dat <- data.frame(Stage = c('random1', 'Planning', 'Analysis', 'random2'), id=1:4, 
        stringsAsFactors = FALSE) 

Так dat выглядит следующим образом:

> dat 
    Stage id 
1 random1 1 
2 Planning 2 
3 Analysis 3 
4 random2 4 

Теперь вы можете сделать что-то вроде этого:

known_levels <- c('Planning', 'Analysis') 
my_order <- order(factor(dat$Stage, levels = known_levels, ordered=TRUE)) 
dat[my_order, ] 

, который дает вам

 Stage id 
2 Planning 2 
3 Analysis 3 
1 random1 1 
4 random2 4 
+0

Спасибо. Я собрал свои данные, но когда я его закрою, данные не отображаются отсортированными «barplot» (таблица (MESH_assurance_involved() [MESH_assurance_involved_sort_order(), «Stage»)), main = «Stage стал задействован») '(круглые скобки из-за блестящих) , Я знаю, что для получения сортированного штрих-кода вам нужны такие трюки, как [упорядочение баров в barplot()] (http://stackoverflow.com/questions/19681586/ordering-bars-in-barplot), но я не понимаю, как получите, что работает для меня: я понимаю, как работает ваш код, но факторинг данных, и порядок сортировки данных тоже в то же время кажется мне сверхъестественным. – anotherfred

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