filter
не будет зависеть от group_by
.Например, если у вас есть фрейм данных, сгруппированный по столбцу var1
, и вы хотите отфильтровать строки с столбцом x
> 50, тот факт, что наблюдение находится в определенной группе, не влияет на тот факт, чточисло равно или не больше 50.
Вот два способа сделать это с некоторыми dplyr
функциями.Первое вычисляет долю, которую каждая группа вносит в общую длину лепестка, вытаскивает эти виды и сохраняет ее как вектор.Затем вы фильтруете фрейм данных только для наблюдений с одним из этих видов и строите график.
Второй выполняет эти вычисления и выводит все в один блок.Преимущество этого в том, что вам не нужно сохранять переменную для вида, который вы держите;недостатком является то, что выполнение математических расчетов в mutate
вызовах, а не summarise
, является грязным и может привести к ошибкам, если вы не будете осторожны с тем, что именно вам нужно сложить (говоря это из опыта).
library(tidyverse)
major_categories <- iris %>%
group_by(Species) %>%
summarise(group_Petal.Length = sum(Petal.Length)) %>%
mutate(share_Petal.Length = group_Petal.Length / sum(group_Petal.Length)) %>%
filter(share_Petal.Length >= 0.3) %>%
pull(Species)
iris %>%
filter(Species %in% major_categories) %>%
ggplot(aes(x = 1, y = Petal.Length)) +
geom_point(stat = "summary", fun.y = "mean") +
geom_errorbar(stat = "summary", fun.data = "mean_se", width = 0, fun.args = list(mult = 1.96)) +
facet_grid(. ~ Species) +
theme_bw()
![](https://i.imgur.com/4lirzk5.png)
iris %>%
group_by(Species) %>%
mutate(group_Petal.Length = sum(Petal.Length)) %>%
ungroup() %>%
mutate(share_Petal.Length = group_Petal.Length / sum(unique(group_Petal.Length))) %>%
filter(share_Petal.Length >= 0.3) %>%
ggplot(aes(x = 1, y = Petal.Length)) +
geom_point(stat = "summary", fun.y = "mean") +
geom_errorbar(stat = "summary", fun.data = "mean_se", width = 0, fun.args = list(mult = 1.96)) +
facet_grid(. ~ Species) +
theme_bw()
![](https://i.imgur.com/gmJQTT7.png)
Также просто хочу отметить, что если у вас нет значений на оси х - здесь это просто фиктивнаязначение - вы также можете пропустить фасетирование и поставить Species
на оси х.Не уверен, применимо ли это к вашему большому набору данных.