去除向量中的异常值

removing outliers in a vector

目的是去除向量中的异常值。 x = datasets::islands ($area)

x =    12    13    13    13    14    14    15    15    16    16    16    19    21    23    25    26    29    29    30    30
       32    33    36    40    42    43    43    44    49    58    73    82    82    84    89   183   184   227   280   306
       840  2968  3745  5500  6795  9390 11506 16988

到目前为止使用

x_rm_out <- x[!x%in% boxplot.stats
                    (x, coef = .05, do.conf = TRUE, do.out = TRUE)$out]

结果

 [1]  12  13  13  13  14  14  15  15  16  16  16  19  21  23  25  26  29  29  30  30  32  33  36  40  42  43  43  44  49  58  73
[32]  82  82  84  89 183 184

有没有办法从向量 (x) 中删除 183 和 184?

寻找异常值

找到异常值的一种非常简单的方法是使用 rstatix 包,然后使用 dplyr 将它们过滤掉:

# Load library:
library(rstatix)
library(dplyr) 

# Make x into dataframe:
x <- data.frame(x)

# Identify outliers:
x %>% 
  identify_outliers()

你现在应该得到这样的输出:

      x is.outlier is.extreme
1   840       TRUE       TRUE
2  2968       TRUE       TRUE
3  3745       TRUE       TRUE
4  5500       TRUE       TRUE
5  6795       TRUE       TRUE
6  9390       TRUE       TRUE
7 11506       TRUE       TRUE
8 16988       TRUE       TRUE

在没有它们的情况下创建数据框

现在你必须过滤掉数据,然后你可以把它变成一个新的数据框 (< 840)。如果您愿意,您也可以使用之前建立的标准 (< 183) 删除它们:

# Filter outliers and create new file:
x2 <- x %>% 
  filter(x < 183)
x2

在您输入 x2 后,您会得到没有异常值的输出:

     x
1   12
2   13
3   13
4   13
5   14
6   14
7   15
8   15
9   16
10  16
11  16
12  19
13  21
14  23
15  25
16  26
17  29
18  29
19  30
20  30
21  32
22  33
23  36
24  40
25  42
26  43
27  43
28  44
29  49
30  58
31  73
32  82
33  82
34  84
35  89