我正在尝试从数据中删除异常值。在我的情况下,离群值是在箱形图上绘制时与其余数据相距的值。除去异常值后,我将数据保存在新文件中,并运行一些预测模型以查看结果。它们与原始数据有何不同。
我使用了一个tutorial并将其用于从数据中删除异常值。本教程使用箱线图法找出异常值。
在具有异常值的列上运行时,它可以正常工作。但是,当我为没有异常值的列运行它时,会引发错误。如何清除此错误?
这是代码:
outlier_rem <- Data_combined #data-frame with 25 var, few have outliers
#removing outliers from the column
outliers <- boxplot(outlier_rem$var1, plot=FALSE)$out
#print(outliers)
ol <- outlier_rem[-which(outlier_rem$var1 %in% outliers),]
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
答案 0 :(得分:1)
以下作品
# Sample data based on mtcars and one additional row
df <- rbind(mtcars[, 1:3], c(100, 6, 300))
# Identify outliers
outliers <- boxplot(df$mpg, plot = FALSE)$out
#[1] 33.9 100.0
# Remove outliers
df[!(df$mpg %in% outliers), ]
您的方法失败的原因是,如果没有outliers
,which(mtcars$mpg %in% numeric(0))
返回integer(0)
,而您最终得到零行的data.frame
,您从dim
中看到的内容。
outliers <- boxplot(mtcars$mpg, plot = FALSE)$out
outliers
#numeric(0)
比较
which(mtcars$mpg %in% outliers)
#integer(0)
使用
df$mpg %in% outliers
# [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#[13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#[25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
SO上有一个nice post,详细说明了这一点。