为异常值标记创建新变量

时间:2016-10-26 08:47:03

标签: r outliers

所以,我正在对给定的数据集进行异常值检测。顺便说一句,这是在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

这可能很容易,但我不知道如何做。有什么想法吗?

4 个答案:

答案 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