Применение фильтра приводит к отображению всех уровней переменной - PullRequest
1 голос
/ 14 апреля 2020

Я отфильтровал фрейм данных, а затем использовал «обобщение», чтобы получить нужные мне показатели.

df.2 <- df.1 %>% filter(state %in% c("NY", "NJ", "MI", "LA", "WA")) %>% group_by(state) %>% 
  summarise(V1 = max(v1), V2 = max(v2), V3 = max(v3))

Затем, когда я это сделаю ...

plot_ly(df.2, x = ~state, y = ~V1, type = "bar", name = "Name1") %>%
  add_trace(y = ~V2, name = "Name2") %>% add_trace(y = ~V3, name = "Name3") %>%
  layout(yaxis = list(title = "Count", barmode = "stack"))

Все состояния появляются на оси x, хотя и специально фильтруются в Нью-Йорке, Нью-Джерси и др. c. Другая проблема ... участки не сложены. Как исправить эти проблемы?

Выход:

structure(list(state = structure(1:5, .Label = c("LA", "MI", 
"NJ", "NY", "WA"), class = "factor"), V1 = c(582, 845, 1232, 
5489, 372), V2 = c(16284, 18970, 44416, 138863, 8384), 
    V3 = c(58371, 31362, 50558, 201195, 83391)), row.names = c(NA, 
-5L), class = c("tbl_df", "tbl", "data.frame"))

1 Ответ

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

Мы можем использовать droplevels в 'df.2', чтобы удалить неиспользуемые уровни (при условии, что столбец 'state' равен factor класс)

df.2 <- droplevels(df.2)
plot_ly(df.2, x = ~state, y = ~V1, type = "bar", name = "Name1") %>%
  add_trace(y = ~V2, name = "Name2") %>% 
  add_trace(y = ~V3, name = "Name3") %>%
  layout(yaxis = list(title = "Count"), barmode = "stack")

enter image description here


Если мы хотим, чтобы это было в порядке возрастания, измените уровни factor после выполнения arrange

df.2 %>%
  arrange(V3, V2, V1) %>% 
  mutate(state = factor(state, levels = unique(state))) %>%
  plot_ly(x = ~state, y = ~V1, type = "bar", name = "Name1") %>%
  add_trace(y = ~V2, name = "Name2") %>%
  add_trace(y = ~V3, name = "Name3") %>%
  layout(yaxis = list(title = "Count"), barmode = "stack")
...