r - 如何从R中的数据框中删除异常值?
问题描述
我有一个包含 25 个变量的数据框。我想从中删除异常值。
我搜索了 SO 论坛,发现人们针对不同的帖子提出了自定义类型的解决方案。
是否有一些标准的 R 函数可以从数据中删除异常值?
这是我从搜索中找到的两个功能。它们有多好,或者是否有一些标准的相同类型的更好的解决方案可以在任何包的 R 中实现这一点。
或者我将一列作为参数传递的函数,它返回异常值删除的数据。
remove_outliers: 链接 1
去除异常值 - 快速而肮脏: 链接 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/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
>
希望它可以帮助你。
推荐阅读
- ssl - nginx SSL 没有起始行:期待:可信证书
- python - python 记录器在错误后更改它自己的日志级别
- html - Bootstrap Navbar Image logo 使用媒体查询调整大小
- docker - Docker 将两个容器上的相同端口映射到主机上的不同端口
- reactjs - 如何在redux中恢复到原来的状态?
- php - 查询在计数php和mysql中只返回一个值
- c# - Unity3D:左操纵杆平移取决于面向方向
- firebase - npm list firebase VS firebase --version
- c# - 如何从 Fluent Api 检索实体配置
- php - 如何正确存储在答案表中?