geom_bar суммирует значения y: это можно изменить? - PullRequest
1 голос
/ 13 апреля 2020

Я немного борюсь с созданием гистограммы в R. Мои данные выглядят примерно так:

   country    x    y
 1 US        10   45  
 2 US        10   67  
 3 GB        50   32
 4 GB        50   11

Обратите внимание, что наблюдения из одной и той же страны имеют одинаковое значение для x.

Я хочу сравнить значения x между странами на гистограмме с одним столбцом для каждой страны и соответствующим значением x. Однако моя проблема заключается в том, что следующий код суммирует значения x. Таким образом, вместо отображения US-бара со значением 10, он суммирует два наблюдения и дает столбцу значение 20. Выбор идет для ГБ: он отображает значение 100 вместо 50.

ggplot(data = data_joined,
       mapping = aes(x = country,
                     y = x)) + 
  geom_bar(stat = "identity")

Как я могу легко это изменить?

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

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

Вы можете попросить перестроить столбцы, используя

ggplot(data = data_joined,
        mapping = aes(x = country,
                      y = x)) + 
   geom_col(position="identity")

, но, вероятно, более разумно использовать набор данных, который не ' дублированные данные Судя по названию, вы получили дуплексы, когда объединили два фрейма данных; поэтому используйте фрейм данных перед соединением, а не соединенный. Или просто выберите одно наблюдение для каждой группы, например,

df <- data_joined %>% group_by(country) %>% filter(row_number() == 1)

, а затем используйте df как data на линейчатом графике.

1 голос
/ 13 апреля 2020

Вы можете передать уникальные значения в ggplot:

ggplot(data = unique(data_joined[, c("country","x")]),
       mapping = aes(x = country,
                     y = x)) + 
  geom_bar(stat = "identity")
...