Выпадает в dataframe, но я хочу сделать это для сгруппированных строк в dataframe в R - PullRequest
0 голосов
/ 24 января 2020

Пример кадра данных. enter image description here

Я хочу определить выбросы для каждой группы и отобразить их в отдельном кадре данных, например, для каждого вида, anthopleura aureradiata , я хочу посмотрите на значения 27,75, 6,83 и 23,91 и вычислите выбросы между этими значениями. Если я нахожу, что строка 4 является выбросом для этого конкретного вида, я хочу отобразить его в моем новом информационном кадре. Кто-нибудь знает, как это сделать?

Воспроизводимый пример:

x = data.frame("species" = c("Agao", "Beta", "Beta", "Beta", "Carrot", "Carrot"), "sum" = c(1, 100, 5, 4, 3, 0))

1 Ответ

0 голосов
/ 24 января 2020

Мы можем изменить эту функцию в соответствии с нашими требованиями и использовать ее для фильтрации выбросов для каждой группы и создания нового кадра данных.

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))
...