Удалить выбросы - PullRequest
       14

Удалить выбросы

0 голосов
/ 13 января 2019

У меня большой набор данных с более чем 2000 наблюдений. Данные касаются концентрации токсинов в тканях животных. Моя переменная ответа myRESULT, и у меня есть несколько наблюдений на ANALYTE интереса. Мне нужно удалить выбросы, как определено числами более трех SD от среднего значения, внутри каждой группы ANALYTE.

Хотя я понимаю, что не следует нормально удалять выбросы из набора данных, я все же хотел бы знать, как это сделать в R.

Вот небольшая часть того, как выглядят мои данные:

data

1 Ответ

0 голосов
/ 13 января 2019

Это подгруппа по группам, что можно сделать разными способами. С помощью dplyr вы используете group_by для установки группировки, затем filter для подстановки строк, передавая ему выражение, которое вычислит возврат TRUE для строк, которые нужно сохранить, и FALSE для выбросов.

Например, используя iris и 2 стандартных отклонения (все в пределах 3):

library(dplyr)

iris_clean <- iris %>% 
    group_by(Species) %>% 
    filter(abs(Petal.Length - mean(Petal.Length)) < 2*sd(Petal.Length))

iris_clean %>% count()
#> # A tibble: 3 x 2
#> # Groups:   Species [3]
#>   Species        n
#>   <fct>      <int>
#> 1 setosa        46
#> 2 versicolor    47
#> 3 virginica     47

С подходом разделения-применения-объединения в базе R,

do.call(rbind, lapply(
    split(iris, iris$Species), 
    function(x) x[abs(x$Petal.Length - mean(x$Petal.Length)) < 2*sd(x$Petal.Length), ]
))
...