2017-07-18 94 views
0

我是R的新手。我有一个问题。为了检查一个变量的异常,我们一般采用:如何使用R在一个boxplot中看到多个变量的异常值?

boxplot(train$rate) 

假设,速度是我的数据集的变量,火车是我的数据集的名字。但是当我有多个像100或150个变量这样的变量时,逐个检查变量的异常值将非常耗时。是否有任何功能可以将100个变量的异常值放在一个盒子里?

如果是,那么使用哪个函数一次性删除这些变量的异常值而不是一次一个?请帮忙解决这个问题。

预先感谢

回答

1

我同意Rui Barradas的观点,认为如果没有进一步的思考就可以删除异常值,这是不好的做法。只要该值有效,您应该将其保存在您的数据中,或者至少运行两次独立分析,不管有无有影响力的值。您可以使用for循环将函数应用于数据集中的每个变量。

train2<-train # Copy old dataset 
outvalue<-list() # Create two empty lists 
outindex<-list() 
for(i in 1:ncol(train2){ # For every column in your dataset 
    outvalue[[i]]<-boxplot(train2[,i])$out # Plot and get the outlier value 
    outindex[[i]]<-which(train2[,i] == outvalue[[i]]) # Get the outlier index 
    train2[outindex[[i]],i] <- NA # Remove the outliers 
} 

这工作和绘制数据,但它很慢。如果您不想绘制数据,但只想要异常值可以查看其他异常值函数,则extremevalues程序包具有一种函数,该函数采用不同的方法来识别异常值,并且不需要绘图。 这将使用getOutliers功能从extremevalues

outRight<-list() 
outLeft<-outRight 
for(i in 1:ncol(train2){ 
    outRight[[i]]<-getOutliers(train2[,i])$iRight 
    outLeft[[i]]<-getOutliers(train2[,i])$iLeft 
    train2[outRight[[i]],i] <- NA 
    train2[outLeft[[i]],i] <- NA 
} 
+1

谢谢你的信息,我不知道包'extremevalues'。看起来很有趣。请注意,'boxplot'有一个参数'plot',当设置为'FALSE'时不会绘制图形。这节省了一些时间并监视屏幕的房地产。 –

+0

非常感谢先生 –

0

boxplot返回一个值的函数。如果您看到帮助页面的Value部分,您会看到它是一个带有命名组件的列表,其中一个是out。这是你似乎在寻找的那个。

bp <- boxplot(train$rate) 
bp$out 
clean <- train$rate[-which(train$rate %in% bp$out)] # to remove the outliers 

我也不会这样做。异常值是数据,正常/可能发生。通过消除它们,您没有考虑到整个数据,这是一种不好的做法。

+0

@RuiBarrades:那不是只有一个变量的情况?如果你有多个变量需要检查,你可能需要对这些变量进行一个循环( )。 也要思考一下:这会导致所有变量都不是异常值的情况。 –

+0

@JakobGepp:是的,你说得对。上面的代码需要进行修改,使其成为一个通用函数,可用于例如'lapply'。 –

+0

非常感谢,先生,这真的有效.. –

相关问题