如果另一列中的某个值是异常值,如何在R中创建一个新列,该列为1?
如果某个特定列的值是异常值,我想创建一个新列,该列的值为1。否则,该值应为0 例如:如果另一列中的某个值是异常值,如何在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
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