【问题标题】:Extracting outliers for each variable in the dataset提取数据集中每个变量的异常值
【发布时间】:2022-08-19 03:03:50
【问题描述】:

我有一个大型数据集,我试图获取每个变量的异常值,以便将它们过滤掉。

对于数据集中的单个变量,我通常会使用:

> dataset$variable <-  !dataset$variable %in% boxplot.stats(dataset$variable)$out

但是,这不适用于具有多种数据类型的大型数据集。 我第一次尝试克服这个问题是使用:

map(dataset, boxplot.stats)

随后为每个变量创建了一个统计数据列表,我未能从中提取异常值。

关于如何解决这个问题的任何建议,并将我对整个数据集的单个变量执行的操作?

    标签: r data-cleaning data-wrangling


    【解决方案1】:

    您应该在将来使用dput() 提供可重现的数据。既然您没有,我将使用 R 中包含的 iris 数据集。我们将识别异常值的行号,而不是识别要删除的值:

    data(iris)
    idx <- sapply(iris[, -5], function(x) which(x %in% boxplot.stats(x)$out))
    out <- sort(unique(unlist(unname(idx))))
    out
    # [1] 16 33 34 61
    

    iris 的最后一列是物种名称,因此我们将其排除在分析之外。然后我们确定每列中异常值的行号。由于您需要删除整行,而不仅仅是值,我们可以合并所有行号,删除重复项并对值进行排序。现在从数据中删除这些行:

    dim(iris)      # The data set has 150 rows with 5 columns
    # [1] 150   5
    iris.mod <- iris[-out, ]
    dim(iris.mod)
    # [1] 146   5  # The modified data set has 146 rows with 5 columns.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      相关资源
      最近更新 更多