删除异常值

时间:2019-01-13 02:03:43

标签: r outliers

我有2000多个观测值的大型数据集。数据涉及动物组织中的毒素浓度。我的响应变量是myRESULT,并且每个感兴趣的ANALYTE有多个观察值。我需要从每个ANALYTE组中删除离均值超过3个SD的异常值。

虽然我意识到我通常不应该从数据集中删除异常值,但我仍然想知道如何在R中做到这一点。

这只是我数据的一小部分:

data

1 个答案:

答案 0 :(得分:3)

它是按组的子集,可以用不同的方式完成。使用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), ]
))