【问题标题】:Flagging the outliers in a dataset in R with additional column在 R 中使用附加列标记数据集中的异常值
【发布时间】:2018-12-31 07:58:32
【问题描述】:

我有一个数据集,我想创建一个附加列并希望标记异常值(超过 IQR 的 1.5 倍)。我目前正在使用此代码:

    #Add additional column for flagging outliers that are beyond  1.5*interquartile range


    plotdata$OUTLIERFLAG <- 0
   #Cycle through variables
    for (i in 1: length(unique(plotdata$variable))){
    pms <- unique(plotdata$variable)[i]
    dats <- subset(plotdata, plotdata$variable ==pms)
    #Cycle through Sampling locations
    for (bore in unique(plotdata$Sample.Point)){
    subdats <- dats[dats$Sample.Point==bore,]
    x1 <- match(boxplot.stats(subdats$value2)$out, subdats$value2)
    ifelse(x1==0, NULL, plotdata[rownames(subdats[x1,]),]$OUTLIERFLAG <- 1)
    }
    }

但是,有时代码不起作用。对于相同的值,我将一个标记为异常值,而另一个则没有。 请帮忙

【问题讨论】:

  • 您需要提供一个可重现的数据集示例来说明您的问题。
  • 请提供一个可重复的数据示例。提供的代码 sn-p 与所提出的问题没有直接关系。此外,您确定要将值 > IQR 视为异常值,还是将值 > 75% 百分位?

标签: r outliers


【解决方案1】:

由于您没有提供任何数据,我将使用 mtcars 数据集。您可能希望将异常值定义为高于 Q3 + IQR * 1.5 的数据点。此外,对于基本的 R 操作,通常避免使用 for 循环。

df <- mtcars[, c(2, 4)]
df$outliers <- ifelse(test = df$hp > quantile(df$hp, probs = 0.75) + IQR(df$hp) * 1.5, yes = "FLAG", no = NA)
df

> df
                    cyl  hp outliers
Mazda RX4             6 110     <NA>
Mazda RX4 Wag         6 110     <NA>
Datsun 710            4  93     <NA>
Hornet 4 Drive        6 110     <NA>
Hornet Sportabout     8 175     <NA>
Valiant               6 105     <NA>
Duster 360            8 245     <NA>
Merc 240D             4  62     <NA>
Merc 230              4  95     <NA>
Merc 280              6 123     <NA>
Merc 280C             6 123     <NA>
Merc 450SE            8 180     <NA>
Merc 450SL            8 180     <NA>
Merc 450SLC           8 180     <NA>
Cadillac Fleetwood    8 205     <NA>
Lincoln Continental   8 215     <NA>
Chrysler Imperial     8 230     <NA>
Fiat 128              4  66     <NA>
Honda Civic           4  52     <NA>
Toyota Corolla        4  65     <NA>
Toyota Corona         4  97     <NA>
Dodge Challenger      8 150     <NA>
AMC Javelin           8 150     <NA>
Camaro Z28            8 245     <NA>
Pontiac Firebird      8 175     <NA>
Fiat X1-9             4  66     <NA>
Porsche 914-2         4  91     <NA>
Lotus Europa          4 113     <NA>
Ford Pantera L        8 264     <NA>
Ferrari Dino          6 175     <NA>
Maserati Bora         8 335     FLAG
Volvo 142E            4 109     <NA>

拥有 8 个气缸和 335 马力的玛莎拉蒂宝来是唯一的异常值。指示异常数据点的盒须图:

boxplot(df$hp, horizontal = TRUE)
# Vertical line indicating the outlier limit
abline(v = quantile(df$hp, probs = 0.75) + IQR(df$hp) * 1.5, col = "red")  # 305.25

【讨论】:

  • 异常值也是那些低于Q1 - IQR * 1.5的点
猜你喜欢
  • 2019-06-24
  • 2017-10-20
  • 2018-09-07
  • 2014-04-02
  • 2015-07-06
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多