Удалить NA в R. (также в графе ggplot)

Мои данные выглядят как

Year     ...  Growth_Rate
2011             NA
2012            2.0
2013     ...    3.2
2014            -2.0
2015            1.3
2016     ...    1.9


ggplot(ridership, aes(Year, Bronx$Growth_Rate, group=1, na.rm=TRUE))+   
    geom_bar(stat= "identity", aes(fill=Year)) +  
    scale_y_continuous("Ridership Growth Rate", 
    labels = percent_format())+ geom_point(col='black', size=0.7) + 
    geom_line(col='black', size=0.3) + 
    ggtitle("Ridership Change in Bronx") + 
    theme(plot.title = element_text(hjust = 0.5))  

Это график. Я хотел бы удалить Y2011


введите описание изображения здесь

2 ответа

Как насчет следующего кода.

Способ 1

Здесь я предварительно обработал пропущенные значения, удалив их и сохранив очищенные данные в отдельном фрейме данных. Конечно, вы можете сохранить его в том же фрейме данных, как, dat<- na.omit(subset(dat, select = c(Year, Growth_Rate)))`

# create some dummy data
Year<- c(2011:2016)
Growth_Rate<- c(NA,2.0,3.2,-2.0,1.3,1.9)
dat<- data.frame(Year, Growth_Rate, stringsAsFactors = FALSE)

# remove missing values
dat.clean<- na.omit(subset(dat, select = c(Year, Growth_Rate)))

# plot it

ggplot(data = dat, aes(Year,Growth_Rate))+
  geom_bar(stat = "identity", na.rm = TRUE)+
  geom_line(col='black', size=0.3)+
  ggtitle("Ridership Change in Bronx") + 
  theme(plot.title = element_text(hjust = 0.5))

С моей точки зрения, метод 1 прост, работает как задумано, но добавляет дополнительную временную переменную для хранения очищенных данных.

Способ 2

Используя coord_cartesian(), Опять же, на мой взгляд, лучший вариант использования этого метода будет, когда вы хотите ограничить значения оси X.

library(ggplot2)
# create some dummy data
Year<- c(2011:2016)
Growth_Rate<- c(NA,2.0,3.2,-2.0,1.3,1.9)
dat<- data.frame(Year, Growth_Rate, stringsAsFactors = FALSE)

# plot it
ggplot(data = dat, aes(Year,Growth_Rate))+
  geom_bar(stat = "identity", na.rm = TRUE)+
  geom_line(col='black', size=0.3)+
  coord_cartesian(xlim = c(2012, 2016))+
  ggtitle("Ridership Change in Bronx") + 
  theme(plot.title = element_text(hjust = 0.5))

Проблема со способом 2 заключается в том, что при выполнении он генерирует предупреждающее сообщение, например, Warning messages: 1: Removed 1 rows containing missing values (position_stack). 2: Removed 1 rows containing missing values (geom_path).

Способ 3

Моя злоба с Method 1, он создавал дополнительную временную переменную для хранения очищенных данных. Поэтому я предлагаю метод 3;

ggplot(data = na.omit(subset(dat, select = c(Year, Growth_Rate))), 
       aes(Year,Growth_Rate))+
  geom_bar(stat = "identity", na.rm = TRUE)+
  geom_line(col='black', size=0.3)+
  ggtitle("Ridership Change in Bronx") + 
  theme(plot.title = element_text(hjust = 0.5))

Я думаю, Method 3 решает оба my grudge так же хорошо как OP question,

@ Добрый ответ - хорошо, если ты хочешь не строить сюжет NA ценности.

Однако вы можете захотеть очистить ваши данные и использовать их позже без значений NA. Здесь вы идете с некоторой фильтрацией, используя is.na:

Year_No_NA <- Year[!is.na(Bronx$Growth_Rate)]
Growth_Rate_No_NA <- Bronx$Growth_Rate[!is.na(Bronx$Growth_Rate)]
Другие вопросы по тегам