如何自动删除boxplot的异常值?

时间:2017-05-02 20:38:38

标签: r

我是R的新手,我正在尝试从每个箱图中删除异常值,但是我有太多的列可以手工制作。对于每一列,我制作一个箱线图。 这是代码:

Library(car)
Boxplot(xf$V1, id.method="y") 
# it prints boxplot's image of first column and outliers of this boxplot in console
# for example output in console is: 2427 536 

# to remove this rows with outliers I do:
xf = xf[-c(2427,536),]

因此,我需要浏览大量的列并删除每列中的异常值。我可以自动执行此操作吗?

1 个答案:

答案 0 :(得分:1)

您的异常值是否会破坏您的数据变量,以至于您必须弄乱您的数据来解释您的发行版?为什么不将数据保留在原来的位置并查看boxplot函数的文档,只显示您想要查看的内容除了R的boxplot函数上的点之外的所有内容?我可以看到破坏平均值的异常值。但是箱线图显示的黑线是中位数,它不应该被异常值那么容易地破坏。

你可以在这里看到一些异常值:

boxplot(airquality$Ozone ~ airquality$Month)

我想知道如何制作没有异常值的箱线图?我看文件怎么样?

?boxplot

boxplot(airquality$Ozone ~ airquality$Month, outline = FALSE)

你知道什么?异常值不再存在。默认情况下,当轮廓为真时,异常值会显示。因此,您将其更改为false并且不显示。

如果你想对你的数据做同样的事情......

boxplot(xf$V1, id.method="y", outline = FALSE)

如果我想从此空气质量数据框的一列中删除一些异常值。

View(airquality)

然后我可以像这样从臭氧列中删除异常值......

ozone <- boxplot(airquality$Ozone, outline = FALSE, plot = FALSE)

让我们看看我们可以从变量方面采取什么。空气质量数据框中臭氧列的异常点是$ out,所以我们就这样做了。

要显示臭氧中的异常值,请执行此操作。

intersect(airquality$Ozone, ozone$out)

要显示臭氧中的其他所有内容,请执行此操作。

setdiff(airquality$Ozone, ozone$out)

我可以将此权限传递给boxplot函数而不指定outline = FALSE,并且我得到没有两个异常点的boxplot。

boxplot(setdiff(airquality$Ozone, ozone$out))

如果您想重新调整所有数据,我会尝试篡改它。就我而言,我正在篡改一个名为airquality的数据框架。

tamper <- apply(airquality, 2, FUN = boxplot)

查看您可以篡改的所有内容。

  tamper$
    tamper$Ozone
tamper$Ozone$out

可能需要for循环来篡改所有异常值(out)。 但我把它们都放在一个变量中。

现在,您可以在所有6列空气质量中看到异常值。正如您所看到的,只有两列1(臭氧)和3(风)具有异常值,并显示它们。

for(i in 1:length(tamper)){print(tamper[[i]]$out)}
[1] 135 168
numeric(0)
[1] 20.1 18.4 20.7
numeric(0)
numeric(0)
numeric(0)