Удалить 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)]