【问题标题】: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.