1

我是 R 新手,我尝试使用一个函数来测试大型数据框中的异常值,该数据框中有 600 多个变量,除了最后两列之外,所有变量都是数字。我尝试了包中的异常值函数outliers来一次测试一列,我以一个无法使用的数字向量结束。有没有更好的方法来识别数据框中的所有异常值。

 myout <- c()
    for (i in 1:dim(training)[2]){
     if (is.numeric(training[,i])) {
     myout <- c(myout,outlier(training[,i]))  }
     }
4

2 回答 2

2

正如您在异常值的帮助文件中看到的那样,它会为每个变量找到一个值,该值与平均值的差异最大。我认为您想要的是为每个变量找到所有异常值数据点的索引。这可以通过以下方式完成(当然您需要先删除非数字变量):

# first write a custom function that returns the index of all outliers
# I define an outlier as 3 sd's away from the mean, you can adjust that

is.outlier <- function(x) which(abs(x - mean(x)) > 3*sd(x))

# turn the df into a list, and apply the function to each variable with lapply

df.as.list <- as.list(df)   # enter the name of your data frame instead of df
lapply(df.as.list, is.outlier)

它将返回一个列表,其中元素 i 是第 i 列中变量异常值的索引。

于 2013-03-05T10:00:19.323 回答
0

You may not actually want to remove outliers, but per this 2 years ago:

x[!x %in% boxplot.stats(x)$out] 
于 2013-03-07T00:00:09.033 回答