Как создать гистограмму с одной категориальной переменной в разные годы в ggplot2? - PullRequest
0 голосов
/ 05 февраля 2019

У меня очень большой фрейм данных, где каждая строка в первом столбце представляет идентификатор с номерами.Другие строки имеют категориальную переменную, которая может быть двух типов (в этом примере, A или B), каждый на год.Вот упрощенный фрейм данных в качестве примера:

id  var2017  var2018  var2019
1     A        B         A
2     B        A         A
3     B        A         B
4     A        A         A
5     A        B         B

Я хотел бы создать гистограмму, которая содержит счетчик каждого типа (A и B) для каждого года, с барами, сгруппированными по типу,Я новичок в языке R, поэтому я попытался создать график для отдельных лет, который прекрасно работает, как показано ниже:

graph <– ggplot(data = example) +
        geom_bar(aes(x = var2017))

Проблема в том, что я не знаю, как поместить их всевсе вместе.Как я могу создать график со всеми типами для каждого года, находящимися на оси x, и счетчиком на оси y?Идентификатор не обязательно должен быть в выводе.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Аналогично предыдущему ответу, но с использованием dplyr::count, geom_col и более понятным синтаксисом для каналов:

library(ggplot2)
library(tidyr)
library(dplyr)

example %>% 
  gather(Var, Val, -id) %>% 
  count(Var, Val) %>% 
  ggplot(aes(Var, n)) + 
    geom_col(aes(fill = Val), 
             position = "dodge")
0 голосов
/ 05 февраля 2019

Способ построения нескольких столбцов в ggplot - сначала преобразовать данные в длинную форму, что можно сделать с помощью tidyr::gather.Затем вы сопоставляете столбец, из которого он получен (теперь хранится в столбце «год»), с одним эстетическим элементом, а счетчик - с другим (geom_bar делает это для вас путем подсчета количества строк).

library(tidyverse);  
ggplot(data = example %>%
         gather(year, type, -id)) +
  geom_bar(aes(x = year, fill = type), position = "dodge")

enter image description here

(Обратите внимание, я изменил пример, чтобы разные годы имели различное число. В противном случае неясно, работает ли он.)

example <- read.table(
  header = T, 
  stringsAsFactors = F,
  text = "id  var2017  var2018  var2019
           1       A        B         A
           2       B        A         A
           3       B        A         B
           4       B        A         A     # var2017 A changed to B
           5       A        B         B")
...