所以,我正在对给定的数据集进行异常值检测。顺便说一句,这是在R中完成的。
使用函数boxplot.stats(x)$ out我获取我正在检测异常值的变量的信息。对?我得到了被认为是异常值的观察值。
我想要做的是在数据集中创建一个新列,该列可以是二进制的,并且对于异常值的观察结果为1,对于不是异常值的观察结果为0。
示例:
Var1 Var2
asd 111
dsa 15
ssa 10
aas 9
dad 10
dda 95
让我们说观察1和6被检测为异常值:
Var1 Var2
asd 111
dda 95
当我使用时:
outlier <- boxplot.stats(Var2)$out
我只收到异常值的值 - 我在控制台中得到111和95。 所以..在我检测到这些异常值之后,我想做以下事情:
Var1 Var2 Outlier
asd 111 1
dsa 15 0
ssa 10 0
aas 9 0
dad 10 0
dda 95 1
这可能很容易,但我不知道如何做。有什么想法吗?
答案 0 :(得分:1)
说你的data.frame名称是&#34;数据&#34;并且你有&#34;异常值&#34;
中的异常值然后这样做:
data$outlier = 0
data[which(data$Var2 %in% outlier),"outlier"] <- 1
答案 1 :(得分:0)
您可以尝试以下方法:
require(data.table)
data <- fread('Var1 Var2
asd 111
dsa 15
ssa 10
aas 9
dad 10
dda 95 ')
outliers <- fread('Var1 Var2
asd 111
dda 95 ')
data[, Outlier:= ifelse(paste(Var1, Var2) %in% paste(outliers$Var1, outliers$Var2), 1, 0)]
答案 2 :(得分:0)
您可以使用min()
中的boxplot.stats(Var2)$out
个值通过ifelse()
计算新变量。
假设data
是您的数据框:
data$outliers <- ifelse(data$Var2 < min(boxplot.stats(data$Var2)$out), 0, 1)
这样您就不必首先将异常值保存在另一个冗余对象中。
答案 3 :(得分:0)
如果您的矢量中有异常值,例如
outlier <- c(111,90)
您可以在函数内使用ifelse函数
来对二进制变量进行子集化within(df,outlier <- ifelse(df$var1%in%outlier,1,0))
var1 var2 outlier
1 111 asd 1
2 10 csd 0
3 11 pud 0
4 12 dud 0
5 90 kud 1