如果另一列中的某个值是异常值,如何在R中创建一个新列,该列为1?

如果另一列中的某个值是异常值,如何在R中创建一个新列,该列为1?,r,R,如果某个特定列的值是异常值,我想创建一个新列,该列的值为1。否则,该值应为0 例如: outlier <- c(rnorm(10,0,5),40,-60,rnorm(10,0,5)) V1 1 -6.273411 2 -6.576979 3 9.256693 4 -2.448468 5 -7.386433 6 -8.922403 7 -1.339524 8 -2.136594 9 -2.271990 10 -6.066499 11

如果某个特定列的值是异常值,我想创建一个新列,该列的值为1。否则,该值应为0

例如:

outlier <- c(rnorm(10,0,5),40,-60,rnorm(10,0,5))

        V1
1   -6.273411
2   -6.576979
3   9.256693
4   -2.448468
5   -7.386433
6   -8.922403
7   -1.339524
8   -2.136594
9   -2.271990
10  -6.066499
11  40.000000
12  -60.000000
13  6.697281
14  -3.212984
15  6.950176
16  -7.054237
17  11.820208
18  -1.836457
19  -1.341675
20  -3.271044
21  -10.260103
22  8.239565
        V1      V2
1   -6.273411   0
2   -6.576979   0
3   9.256693    0
4   -2.448468   0
5   -7.386433   0
6   -8.922403   0
7   -1.339524   0
8   -2.136594   0
9   -2.271990   0
10  -6.066499   0
11  40.000000   1
12  -60.000000  1
13  6.697281    0
14  -3.212984   0
15  6.950176    0
16  -7.054237   0
17  11.820208   0
18  -1.836457   0
19  -1.341675   0
20  -3.271044   0
21  -10.260103  0
22  8.239565    0
我想归档的内容如下:

outlier <- c(rnorm(10,0,5),40,-60,rnorm(10,0,5))

        V1
1   -6.273411
2   -6.576979
3   9.256693
4   -2.448468
5   -7.386433
6   -8.922403
7   -1.339524
8   -2.136594
9   -2.271990
10  -6.066499
11  40.000000
12  -60.000000
13  6.697281
14  -3.212984
15  6.950176
16  -7.054237
17  11.820208
18  -1.836457
19  -1.341675
20  -3.271044
21  -10.260103
22  8.239565
        V1      V2
1   -6.273411   0
2   -6.576979   0
3   9.256693    0
4   -2.448468   0
5   -7.386433   0
6   -8.922403   0
7   -1.339524   0
8   -2.136594   0
9   -2.271990   0
10  -6.066499   0
11  40.000000   1
12  -60.000000  1
13  6.697281    0
14  -3.212984   0
15  6.950176    0
16  -7.054237   0
17  11.820208   0
18  -1.836457   0
19  -1.341675   0
20  -3.271044   0
21  -10.260103  0
22  8.239565    0
有什么优雅的方法可以做到这一点吗


谢谢

我们可以使用%中的
%将其转换为逻辑,并使用
as.integer
+

+(outlier %in% boxplot.stats(outlier)$out)
#[1] 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0

我们可以使用%
中的
%将其转换为逻辑,并使用
as.integer
+

+(outlier %in% boxplot.stats(outlier)$out)
#[1] 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0

请记住,对于任何情况下的“异常值”,都没有一个通用的、一致的定义。默认情况下,
boxplot
假定该值与.25和.75四分位数之间的距离不超过四分位数范围的1.5倍。您可以编写自己的函数,从而完全控制定义。比如说

is_outlier <- function(x) {
  iqr <- IQR(x)
  q <- quantile(x, c(.25, .75))
  x < q[1]-1.5*iqr | x > q[2]+1.5*iqr
}

返回TRUE/FALSE。如果确实需要的话,可以将其转换为1/0,并使用.numeric(is_outlier(outlier))
is_outlier(outlier)+0

请记住,对于所有情况下的“outlier”(离群值)没有统一的定义。默认情况下,
boxplot
假定该值与.25和.75四分位数之间的距离不超过四分位数范围的1.5倍。您可以编写自己的函数,从而完全控制定义。比如说

is_outlier <- function(x) {
  iqr <- IQR(x)
  q <- quantile(x, c(.25, .75))
  x < q[1]-1.5*iqr | x > q[2]+1.5*iqr
}
返回TRUE/FALSE。如果确实需要,您可以使用
as.numeric(is_outlier(outlier))
is_outlier(outlier)+0将其转换为1/0