如何从R中的数据框中删除异常值?

时间:2019-02-18 16:33:32

标签: r outliers

我有一个包含25个变量的数据框。我要从中删除异常值。

我搜索了SO论坛,发现人们针对不同的帖子提出了自定义解决方案。

是否有一些标准R函数可以从数据中删除异常值?

这是我在搜索中找到的两个功能。它们有多好?或者是否有某种标准的更好的标准解决方案可以在任何包装中的R中实现。

或一个函数,我将一列作为参数传递,并且它返回异常值删除的数据。

删除异常值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

1 个答案:

答案 0 :(得分:1)

我使用切比雪夫不等式作为降低极值的标准。它具有在许多概率分布中都适用的优点。该规则规定,不超过平均值的1 / k ^ 2的值可以偏离均值大于k个标准偏差。例如:

> x <- rchisq(1000, 13)
> 
> mean(x)
[1] 12.83906
> sd(x)
[1] 4.93234
> 
> Ndesv <- 5
> 
> x[x > (mean(x) + Ndesv * sd(x))]
[1] 38.7575
> 
> Conf <- (1 - 1 / Ndesv^2)
> print(Conf)
[1] 0.96
> 

希望它对您有帮助。