Я пытаюсь выделить определенные точки данных из набора данных gapminder на точечной диаграмме со следующими критериями:
year == 2012,
continent == Asia,
population > median(population).
введите описание изображения здесь
Проблема Я столкнулся с тем, что мне приходится каждый раз фильтровать данные с помощью year == 2012 внутри каждого geom_point () слой, который, как мне кажется, снова и снова выполняет одну и ту же фильтрацию данных на каждом уровне и ненужные затраты времени и вычислений.
Как я могу отфильтровать эти данные один раз для год == 2012 и использовать все уровни (не хочу создавать новый фрейм данных относительно года).
Код ниже:
# Creating median population for filter criteria
med_2012_pop <- gapminder %>%
filter(year == 2012 & continent == "Asia") %>%
select(population) %>% .$population %>% median(na.rm = T)
# plotting
gapminder %>%
ggplot(aes(x=fertility, y=life_expectancy, color=continent)) +
# layer 1 - highlighted
geom_point(data = filter(gapminder, year == 2012 & continent == "Asia" & population > med_2012_pop),
size=5, color="gray") +
# layer 2 - base layer
geom_point(data = filter(gapminder, year == 2012)) +
# layer 3 Country highlight - Japan
geom_point(data = filter(gapminder, year == 2012 & country == "Japan"), size=1, color="black") +
geom_label(x=1.8, y=84, label="Japan", color="black", size=3) +
theme_minimal()
Когда я пытаюсь ввести код ниже - без упоминания разрыва и года внутри geom_point он не работает и дает ошибку
gapminder %>% filter(year == 2012) %>%
ggplot(aes(x=fertility, y=life_expectancy, color=continent)) +
geom_point(data = filter(continent == "Asia" & population > med_2012_pop),
size=5, color="gray") +
geom_point() +
# Adding codes for Japan below
geom_point(data = filter(country == "Japan"), size=1, color="black") +
geom_label(x=1.8, y=84, label="Japan", color="black", size=3)
theme_minimal() +
Итак, как я могу сделать свой код более эффективным?