【发布时间】:2019-02-18 16:33:32
【问题描述】:
我有一个包含 25 个变量的数据框。我想从中删除异常值。
我搜索了 SO 论坛,发现人们针对不同的帖子提出了自定义类型的解决方案。
是否有一些标准的 R 函数可以从数据中删除异常值?
这是我从搜索中找到的两个函数。它们有多好,或者是否有一些标准的同类更好的解决方案可以在任何包中的 R 中实现这一点。
或一个函数,我将一列作为参数传递,它返回异常值删除的数据。
remove_outliers: Link 1
去除异常值 - 快速而肮脏: Link 2
编辑
我的数据框中的数据包含来自两个来源的连续数据,即天气和地面。根据天气,预测因子是温度、湿度、风、雨、太阳辐射。来自地下的是地下水和土壤水分。我想找到土壤水分和其他变量之间的关系。我正在使用不同的模型分析数据。现在我想在从数据中删除异常值后查看结果。
编辑 我使用并编辑了上面添加的参考教程之一中的代码。当数据中有一些异常值时,它工作正常。但是当没有时它会引发错误。如何纠正这一点。
代码如下:
outlier_rem<-Data_combined #data-frame with 25 var, few have outliers
#removong outliers from the column
outliers <- boxplot(outlier_rem$var1, plot=FALSE)$out
#print(outliers)
#ol<-outlier_rem[which(outlier_rem$var1 %in% outliers),]
ol<-outlier_rem[-which(outlier_rem$var1 %in% outliers),]
dim(ol)
boxplot(ol)
这是 ol 返回 0 值时的错误消息。
> dim(ol)
[1] 0 25
> boxplot(ol)
no non-missing arguments to min; returning Infno non-missing arguments to max; returning -InfError in plot.window(xlim = xlim, ylim = ylim, log = log, yaxs = pars$yaxs) :
need finite 'ylim' values
【问题讨论】:
-
“异常值”没有标准定义。这完全取决于您的数据以及您打算如何处理这些数据。如果没有更精确的定义,这个问题就没有任何意义。
-
我在 OP 中添加了更多细节
-
这仍然不能清楚地说明您的情况是什么“异常值”。您是否担心您获得的数据测量不正确?或者您为什么要完全删除任何数据?
-
我不想把它从原始集合中删除。我有来自两个不同地方的相同数据。但是分析的结果却大相径庭。适合在一个地方进行预测,而在另一个地方则不行。我想在删除异常值后看看结果如何。在我的情况下,离群值是一个远离数据正态分布的值。就像水分分布均匀,然后突然之间很少有值很远。可能传感器误读或其他原因。因此,要查看没有那些异常值或通常远离大多数值变量的结果。