R - удалить категории с гистограммы

Используя этот код:

ggplot(Template.2006.2017, aes(x=Disaster_category, y=Total_US_received_from.CERF)) + 
  ggtitle("MEAN Total Funding Received CERF") + 
  geom_bar(stat="summary", fun.y = "mean", fill="lightblue") + 
  coord_flip() + labs(y="US$") + labs(x="")

Я создал эту гистограмму:

enter image description here

показывает финансирование различных категорий стихийных бедствий. Теперь я хотел бы удалить все категории, получившие нулевое финансирование (Другое, Заражение насекомыми, Болезнь и отсутствует / нет данных). Как это можно сделать в r?

Вот мои данные (сжатые):

structure(list(Disaster_category = structure(c(1L, 15L, 17L, 
15L, 5L, 8L, 13L, 8L, 2L, 8L, 2L, 3L, 8L, 2L, 8L, 2L, 10L, 5L, 
7L, 8L, 15L, 2L, 8L, 2L, 15L, 15L, 8L, 15L, 2L, 17L, 2L, 7L, 
2L, 8L, 2L, 3L, 2L, 8L, 8L, 2L, 8L, 17L, 2L, 3L, 8L, 8L, 2L, 
8L, 8L, 8L, 2L, 8L, 3L, 2L, 3L, 2L, 8L, 2L, 3L, 8L, 2L, 8L, 2L, 
15L, 5L, 8L, 13L, 8L, 15L, 2L, 8L, 2L, 3L, 2L, 3L, 15L, 8L, 3L, 
2L, 3L, 8L, 2L, 3L, 2L, 8L, 2L, 8L, 15L, 2L, 8L, 8L, 5L, 2L, 
8L, 2L, 3L, 2L, 17L, 2L, 17L, 2L, 4L, 5L, 8L, 8L, 2L, 8L, 15L, 
2L, 15L, 15L, 7L, 2L, 8L, 2L, 15L, 15L, 7L, 8L, 17L, 2L, 15L, 
8L, 2L, 17L, 2L, 3L, 8L, 2L, 5L, 2L, 8L, 2L, 8L, 8L, 15L, 2L, 
8L, 2L, 15L, 8L, 2L, 15L, 8L, 7L, 8L, 15L, 2L, 8L, 8L), .Label = c("", 
" ", "Disease", "Disease related disaster", "Drought", "Drought & storm", 
"Extreme temperature / fire", "Flood", "Flood & drought", "Insect infestation", 
"Insect infestation & drought", "Landslide & flood", "Landslide / mudslide", 
"Other", "Storm", "Storm & flood", "Winter"), class = "factor"), 
    Total_US_received_from.CERF = c(NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 678307.8333, 678307.8333, 
    678307.8333, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, 1110469.5, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, 1905355, NA, NA, NA, NA, NA, NA, NA, NA, NA, 2493246, 
    2493246, 2493246, 2493246, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, 333333.3333, 333333.3333, 333333.3333, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), 
    Total_US_received = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, 15507224.5, 15507224.5, 15507224.5, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, 333333.3333, 333333.3333, 
    333333.3333, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA), Total_US_required = c(NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 20502064.83, 
    20502064.83, 20502064.83, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, 3070192, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    49955895.25, 49955895.25, 49955895.25, 49955895.25, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 333333.3333, 
    333333.3333, 333333.3333, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA)), row.names = c(NA, 150L), class = "data.frame")

Привет, @VincentGuillemot, в какой части кода вы использовали функцию подмножества? Я получаю следующую ошибку при включении этого в свой код: Ошибка в подмножестве (Template.2016.2017,! Is.na (Total_US_received_from.CERF)): объект 'Template.2016.2017' не найден

JanC 10.09.2018 11:51

@VincentGuillemot, используя функцию подмножества, разработанную в конечном итоге ^^. Спасибо за помощь!

JanC 10.09.2018 12:44
1
2
1 513
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Решит ли вашу проблему удаление значений NA из фрейма данных?

library(tidyverse)
Template.2006.2017 %>% 
  filter(!is.na(Total_US_received_from.CERF)) %>% 
  ggplot(aes(x=Disaster_category, y=Total_US_received_from.CERF)) +
  ggtitle("MEAN Total Funding Received CERF") + 
  geom_bar(stat="summary", fun.y = "mean", fill="lightblue") + 
  coord_flip() + labs(y="US$") + labs(x="")

enter image description here

Ответ принят как подходящий

Рассмотрите возможность вычисления групповых средних с помощью ave перед построением графика, а затем подмножество всех строк со средними значениями больше нуля в качестве базовых данных для построения графика:

# ADD NEW INLINE GROUP MEAN
Template.2006.2017$CERF_categ_mean <- with(Template.2006.2017, 
                                           ave(Total_US_received_from.CERF, Disaster_category, 
                                               FUN=function(x) mean(x, na.rm=TRUE)))

# SUBSET DATAFRAME
sub_df <- subset(Template.2006.2017, CERF_categ_mean > 0)

# PLOT SUBSETTED DATA
ggplot(sub_df, aes(x=Disaster_category, y=Total_US_received_from.CERF)) + 
  ggtitle("MEAN Total Funding Received CERF") + 
  geom_bar(stat="summary", fun.y = "mean", fill="lightblue") + 
  coord_flip() + labs(y="US$") + labs(x="")

Plot Output

Другие вопросы по теме