我是R的新手。我有一个问题。为了检查变量的异常值,我们通常使用:
{{1}}
假设,rate是我的数据集的变量,train是我的数据集名称。但是当我有多个变量(如100或150个变量)时,检查逐个变量的异常值将非常耗时。是否有任何函数可以将100个变量的异常值放在一个箱图中?
如果是,那么使用哪个函数一次删除那些变量的异常值而不是一个一个?请帮助解决这个问题。
提前致谢
答案 0 :(得分: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 :(得分:0)
函数boxplot
返回一个值。如果您看到其帮助页面的Value
部分,则会看到它是包含命名组件的列表,其中一个是out
。那是你似乎在寻找的那个。
bp <- boxplot(train$rate)
bp$out
clean <- train$rate[-which(train$rate %in% bp$out)] # to remove the outliers
我也不会这样做。异常值是数据,正常/可能发生。通过消除它们,您没有考虑到整个数据,这是一种不好的做法。