【发布时间】:2016-06-28 08:34:10
【问题描述】:
我正在开发一个函数,该函数将根据 3 sigma 规则消除给定数据集中的异常值。我的代码如下所示。 “data”是要处理的数据集。
rm.outlier <- function(data){
apply(data, 2, function(var) {
sigma3.plus <- mean(var) + 3 * sd(var)
sigma3.min <- mean(var) - 3 * sd(var)
sapply(var, function(y) {
if (y > sigma3.plus){
y <- sigma3.plus
} else if (y < sigma3.min){
y <- sigma3.min
} else {y <- y}
})
})
as.data.frame(data)
}
为了检查该功能是否有效,我编写了一个简短的测试:
set.seed(123)
a <- data.frame("var1" = rnorm(10000, 0, 1))
b <- a
sum(a$var1 > mean(a$var1) + 3 * sd(a$var1)) # number of outliers in a
结果,我得到:
[1] 12
所以数据框 a 中的变量 var1 有 12 个异常值。接下来,我尝试在这个对象上应用我的函数:
a2 <- rm.outlier(a)
sum(b$var1 - a2$var1)
不幸的是,它给出了 0,这清楚地表明某些东西不起作用。我已经确定 sapply 的实现是正确的,所以我的申请中一定有错误。任何帮助,将不胜感激。
【问题讨论】:
标签: r function apply sapply outliers