Отсортировать или упорядочить несколько столбцов с помощью столбчатой диаграммы geom_col

#r #ggplot2 #geom-col

#r #ggplot2 #геометрическая таблица

Вопрос:

У меня есть таблица такого типа:

 Year    Substance     Number
2013        A           32
2013        B           27
2013        C           17
2013        D           17
2013        E           15
2013        F           13
2014        B           20
2014        D           17
2014        A           16
2014        C           11
2014        F            9
2014        G            3
  

В принципе, до 2018 года в каждом году содержится 6 или 7 веществ, и у каждого вещества есть номер (частота встречаемости). У веществ есть реальные названия, но я не могу опубликовать их в Интернете, поэтому я изменил их на A, B, C, D, E, F и G. Я не могу упорядочить столбцы так, как я хочу, в порядке убывания.

Я провел много исследований в Интернете и перепробовал множество вещей: forcats, factor, levels, reorder и т.д. И Ничего из этого не сработало. Я новичок в R, поэтому сейчас я не совсем понимаю, какой был бы лучший способ сделать то, что я хочу.

Когда я пытаюсь построить график подобным образом, он размещает содержимое в алфавитном порядке:

 ggplot(Test, aes(x = Year, y = Number, fill = Substance))   geom_col(position = "dodge")
  

Для первого года, 2013, порядок правильный. Я хочу, чтобы это выглядело так, в порядке убывания, для каждого второго года. Что я должен делать?

Ответ №1:

Это довольно сложно, потому что ваш порядок меняется с каждым годом, поэтому преобразование факторных переменных становится беспорядочным. Вот один из способов сделать это путем сортировки позиции x с использованием отдельного числового значения:

 library('data.table')
library('ggplot2')

Test[, Ranking:= rank(-Number, ties.method = 'first'), by = .(Year)]
ggplot(Test, aes(x = Ranking,
                 y = Number, 
                 fill = Substance))  
  geom_col(position = 'dodge')  
  scale_x_continuous(name = '', breaks = 0)  
  facet_wrap(~Year)
  

Вывод:

введите описание изображения здесь

Комментарии:

1. Спасибо за ваш быстрый ответ 🙂 Когда я пробую ваше решение, у меня появляется следующая ошибка: Ошибка в FUN (X[[i]], …): объект ‘Ranking’ не найден У меня уже есть пакеты ggplot2 и data.table, поэтому я не понимаю, откуда эта ошибка

2. Нет проблем. Похоже, вы не назначили переменную «Ранжирование» — убедитесь, что вы используете первую строку кода: Test[, Ranking:= rank(-Number, ties.method = 'first'), by = .(Year)] и, пожалуйста, примите ответ, если это сработает 🙂

3. Да, я сделал это, но там написано: Ошибка в [.tbl_df (Test, , := (Ranking, rank(-Number, ties.method = «first»)), : неиспользуемый аргумент (by = .(Year)) при попытке запустить первую строку И не волнуйтесь, я приму это 🙂

4. убедитесь, что вы data.table установили и подключили

5. также убедитесь, что data.table объект «Тестовый» перед запуском кода: Test <- as.data.table(Test)