因此,我想提取箱线图中显示的异常值并找到相应的行并将其从数据框中删除。我该怎么做?
我用谷歌搜索了这个问题,但找不到任何解决方案。我发现的对该问题的唯一类似解决方案是使用函数
boxplot
,但该函数仅提取异常值的值,而不是数据帧的相应行。
使用内置的
InsectSprays
数据集,您可以将 boxplot
命令保存到 R 对象,然后根据函数返回的 $out
和 $group
值过滤掉异常值。
bp <- boxplot(count ~ spray, data = InsectSprays)
bp$out
#[1] 7 12
bp$group
#[1] 3 4
IS_no_outlier <- InsectSprays[
!(InsectSprays$spray %in% levels(InsectSprays$spray)[bp$group] &
InsectSprays$count %in% bp$out),]
boxplot(count ~ spray, data = IS_no_outlier)
您还可以使用
which
获取定义为异常值的行
which(InsectSprays$spray %in% levels(InsectSprays$spray)[bp$group] & InsectSprays$count %in% bp$out)
#[1] 27 39
但要小心,因为更改数据集现在可能会引发新的异常值。