繁体   English   中英

移除R中的离群值

[英]Removing outliers in R

我查看了一组数据,并决定最好删除异常值,其中异常值的定义是远离均值2SD。

如果我有一组数据,例如500个具有15个不同属性的行,那么如何删除所有具有1个或多个属性且与平均值相差2个标准差的行?

有使用R执行此操作的简单方法吗? 谢谢,

可能有很多方法,并且可能会添加一些软件包来处理此问题。 我建议您先尝试一下:

library(sos); findFn("outlier")

这是一种使用可以使向量标准化的scale函数来完成您所要求的方法。

#create a data set with outliers
set.seed(10)
dat <- data.frame(sapply(seq_len(5), function(i) 
    sample(c(1:50, 100:101), 200, replace=TRUE)))

#standardize each column (we use it in the outdet function)
scale(dat)

#create function that looks for values > +/- 2 sd from mean
outdet <- function(x) abs(scale(x)) >= 2
#index with the function to remove those values
dat[!apply(sapply(dat, outdet), 1, any), ]

因此,在回答您的问题时,有一种简单的方法可以将执行此操作的代码简化为1行代码:

dat[!apply(sapply(dat, function(x) abs(scale(x)) >= 2), 1, any), ]

而且我猜想有一个软件包可以做到这一点,甚至更多。 sos软件包非常棒(IMHO),可用于查找执行所需功能的函数。

na.rm = TRUE, ...) {
qnt <- quantile(x, probs=c(.25, .75), na.rm = na.rm, ...)
H <- 1.5 * IQR(x, na.rm = na.rm)
y <- x
y[x < (qnt[1] - H)] <- NA
y[x > (qnt[2] + H)] <- NA
y
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM