我是R的新手。我有一个问题。为了检查一个变量的异常,我们一般采用:如何使用R在一个boxplot中看到多个变量的异常值?
boxplot(train$rate)
假设,速度是我的数据集的变量,火车是我的数据集的名字。但是当我有多个像100或150个变量这样的变量时,逐个检查变量的异常值将非常耗时。是否有任何功能可以将100个变量的异常值放在一个盒子里?
如果是,那么使用哪个函数一次性删除这些变量的异常值而不是一次一个?请帮忙解决这个问题。
预先感谢
我是R的新手。我有一个问题。为了检查一个变量的异常,我们一般采用:如何使用R在一个boxplot中看到多个变量的异常值?
boxplot(train$rate)
假设,速度是我的数据集的变量,火车是我的数据集的名字。但是当我有多个像100或150个变量这样的变量时,逐个检查变量的异常值将非常耗时。是否有任何功能可以将100个变量的异常值放在一个盒子里?
如果是,那么使用哪个函数一次性删除这些变量的异常值而不是一次一个?请帮忙解决这个问题。
预先感谢
我同意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
}
boxplot
返回一个值的函数。如果您看到帮助页面的Value
部分,您会看到它是一个带有命名组件的列表,其中一个是out
。这是你似乎在寻找的那个。
bp <- boxplot(train$rate)
bp$out
clean <- train$rate[-which(train$rate %in% bp$out)] # to remove the outliers
我也不会这样做。异常值是数据,正常/可能发生。通过消除它们,您没有考虑到整个数据,这是一种不好的做法。
@RuiBarrades:那不是只有一个变量的情况?如果你有多个变量需要检查,你可能需要对这些变量进行一个循环( )。 也要思考一下:这会导致所有变量都不是异常值的情况。 –
@JakobGepp:是的,你说得对。上面的代码需要进行修改,使其成为一个通用函数,可用于例如'lapply'。 –
非常感谢,先生,这真的有效.. –
谢谢你的信息,我不知道包'extremevalues'。看起来很有趣。请注意,'boxplot'有一个参数'plot',当设置为'FALSE'时不会绘制图形。这节省了一些时间并监视屏幕的房地产。 –
非常感谢先生 –