【问题标题】:Creating a new variable for an outlier tag为异常值标签创建新变量
【发布时间】:2017-03-08 13:09:51
【问题描述】:

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

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

【问题讨论】:

    标签: r outliers


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

      假设 data 是您的数据框:

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

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

      【讨论】:

        【解决方案3】:

        假设您的 data.frame 名称是“数据”,并且您在“离群值”中有异常值的值

        然后这样做:

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

        【讨论】:

          【解决方案4】:

          您可以尝试以下方法:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-07-18
            • 2019-05-13
            • 2018-07-31
            • 2020-06-26
            相关资源
            最近更新 更多