如何删除R中的异常值?

如何删除R中的异常值?,r,outliers,R,Outliers,我目前正试图以一种非常简单的方式删除R中的异常值。我知道有一些函数可以自己创建,但我想输入一些关于这个简单代码的信息,为什么它看起来不起作用 outliers <- boxplot(okt$pris)$out okt_no_out <- okt[-c(outliers),] boxplot(okt_no_out$pris) 异常值箱线图$out返回的是异常值的值,而不是异常值的位置。因此,okt[-c(异常值),]正在删除数据序列中的随机点,其中一些是异常值,另一些不是 您可以

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

outliers <- boxplot(okt$pris)$out

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

boxplot(okt_no_out$pris)

异常值
箱线图$out
返回的是异常值的值,而不是异常值的位置。因此,
okt[-c(异常值),]
正在删除数据序列中的随机点,其中一些是异常值,另一些不是

您可以使用箱线图统计信息的输出检索上下胡须的末端,然后使用这些值过滤数据集。请参见下面的示例:

#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)
测试数据 代码中的testdata
c(异常值)
是异常值的向量,而不是行号;因此,当您将其添加到
[]
中进行索引时,它不会删除异常值所在的行。另一方面,
-c(其中(okt$pris%在%outliers中))
返回异常值所在的行号。希望这有帮助

#filter outliers
outliers <- boxplot(okt$pris)$out

#drop the rows containing outliers
okt_no_out <- okt[-c(which(okt$pris %in% outliers)),]

#boxplot without outliers
boxplot(okt_no_out$pris)
#过滤异常值

离群值我猜你删除了原始离群值。但这使得胡须缩小,在缩小的集合中出现了新的异常值。一个最小的可重复的例子是必须的谢谢,这就成功了!但是,为了消除这些极端情况,我必须使用特定列,而不是我在上面的注释中键入的dataframe-testdata错误,它应该是另一列way@Dave2e在我不知道该选择什么作为极端的情况下,如何将这种技术应用于整个数据帧?@suryarahul,我不理解你的问题。如果将数据帧传递给box plot函数,则b$stats将返回一个值矩阵,列为变量,行为5个统计(下、25%、中、75%和上)@Dave2e如果我将完整的
iris
数据传递到
boxplot
函数,那么
lowerwhisker
upperwhisker
将是什么?请提供有关示例代码的更多信息。我不知道你使用哪种语言或哪种库。如果你能解释一下它是如何工作的,那会很有帮助。“希望这有帮助!”实际上根本没有帮助。@BuffK,这是一个没有库的R。我想Lucas已经从中复制了代码。刚刚编辑了评论,抱歉我没有说得非常清楚!