Суммируйте данные по группам в Plotly R - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть фрейм данных с животными в двух зоопарках.Теперь эти животные повторяются.Когда я строю это с помощью заговора, он просто берет одно значение для животного и строит его.Так что даже если в SF_ZOO есть 9 жирафов, он просто показывает 8.Как я могу сгруппировать по животным и показать сумму всех значений?

library(plotly)

Animals <- c("giraffes", "orangutans", "monkeys","giraffes", "orangutans", "monkeys")
SF_Zoo <- c(1,4,6,8,9,11)
LA_Zoo <- c(11,13,15,12,15,08)
data <- data.frame(Animals, SF_Zoo, LA_Zoo)

p <- plot_ly(data, x = aggregate(~Animals), y = ~SF_Zoo, type = 'bar', name = 'SF Zoo') %>%
  add_trace(y = ~LA_Zoo, name = 'LA Zoo') %>%
  layout(yaxis = list(title = 'Count'), barmode = 'group')

1 Ответ

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

Вы неправильно используете aggregate;Сначала я бы aggregate, а затем построил

data.agg <- aggregate(cbind(SF_Zoo, LA_Zoo) ~ Animals, data = data, FUN = sum)

p <- plot_ly(data.agg, x = ~Animals, y = ~SF_Zoo, type = 'bar', name = 'SF Zoo') %>%
  add_trace(y = ~LA_Zoo, name = 'LA Zoo') %>%
  layout(yaxis = list(title = 'Count'), barmode = 'group')

enter image description here

Или вы могли бы пойти по пути tidyverse и использовать ggplotly для построения графика

library(tidyverse)
p <- data %>%
    gather(Zoo, Value, -Animals) %>%
    group_by(Animals, Zoo) %>%
    summarise(Value = sum(Value)) %>%
    ggplot(aes(x = Animals, y = Value, fill = Zoo)) +
    geom_col(position = "dodge2")
ggplotly(p)

enter image description here

...