删除r中的异常值非常容易?

问题描述 投票:1回答:1

我目前正在尝试以非常简单的方式删除R中的异常值。我知道你可以自己创建一些函数,但是我想对这个简单的代码有一些输入,为什么它看起来不起作用?

outliers <- boxplot(okt$pris)$out

okt_no_out <- okt[-c(outliers),]

boxplot(okt_no_out$pris)

所以第一行我用异常值创建一个向量,第二行我创建一个新的数据帧,省略该向量中的值。但是......当我检查新数据帧时,只删除了750个异常值中的400个?

因此,向量异常值包含大约750行,但在执行此操作时,它只删除了大约halv ......

所以,我的简单问题。我可能是愚蠢的,但不应该这些简单的代码行以非常方便的方式删除异常值?

//彼得

r outliers
1个回答
0
投票

boxplot$out返回异常值的值,而不是异常值的位置。所以okt[-c(outliers),]正在删除数据系列中的随机点,其中一些是异常值而另一些则不是。

你可以做的是使用boxplot统计信息的输出来检索上下胡须的末端,然后使用这些值过滤你的数据集。请参阅以下示例:

#test data
testdata<-iris$Sepal.Width

#return boxplot object
b<-boxplot(testdata)

#find extremes from the boxplot's stats output
lowerwhisker<-b$stats[1]
upperwhisker<-b$stats[5]

#remove the extremes
testdata<-testdata[testdata>lowerwhisker & testdata<upperwhisker]

#replot
b<-boxplot(testdata)
© www.soinside.com 2019 - 2024. All rights reserved.