Мы можем изменить эту функцию в соответствии с нашими требованиями и использовать ее для фильтрации выбросов для каждой группы и создания нового кадра данных.
library(dplyr)
remove_outliers <- function(x, na.rm = TRUE, ...) {
qnt <- quantile(x, probs=c(.25, .75), na.rm = na.rm, ...)
H <- 1.5 * IQR(x, na.rm = na.rm)
x < (qnt[1] - H) | x > (qnt[2] + H)
}
separate_dataframe <- x %>% group_by(species) %>% filter(remove_outliers(sum))
separate_dataframe
# species sum
# <fct> <dbl>
#1 Beta -100
данные
x = data.frame(species = c("Agao", "Beta", "Beta", "Beta", "Beta",
"Carrot", "Carrot"),sum = c(1, 1, 5, 4, -100, 3,0))