为离群值标签创建新变量

Creating a new variable for an outlier tag

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

这可能真的很容易做到,但我不知道怎么做。有什么想法吗?

您可以尝试以下方法:

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)]

假设你的 data.frame 名字是 "data" 并且你在 "outlier"

中有离群值

然后这样做:

data$outlier = 0

data[which(data$Var2 %in% outlier),"outlier"] <- 1

您可以使用 boxplot.stats(Var2)$out 中值的 min() 通过 ifelse() 计算新变量。

假设 data 是您的数据框:

data$outliers <- ifelse(data$Var2 < min(boxplot.stats(data$Var2)$out), 0, 1)

这样您就不必先将异常值保存在另一个冗余对象中。

如果你的向量中有异常值,比如

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