【发布时间】:2018-10-10 15:41:57
【问题描述】:
在我的 SQL Server 专栏中,我必须分别删除每个组的异常值。这是我的专栏
select
customer,
sku,
stuff,
action,
acnumber,
year
from
mytable
样本数据:
customer sku year stuff action
-----------------------------------
1 1 2 2017 10 0
2 1 2 2017 20 1
3 1 3 2017 30 0
4 1 3 2017 40 1
5 2 4 2017 50 0
6 2 4 2017 60 1
7 2 5 2017 70 0
8 2 5 2017 80 1
9 1 2 2018 10 0
10 1 2 2018 20 1
11 1 3 2018 30 0
12 1 3 2018 40 1
13 2 4 2018 50 0
14 2 4 2018 60 1
15 2 5 2018 70 0
16 2 5 2018 80 1
我必须从 stuff 变量中删除异常值,但要按组 customer+sku+year 分开。
所有低于 25% 和高于 75% 的值都应被视为异常值,并且每个组都必须遵守这一原则。
如何清除数据集以供下一步工作?
注意,在这个数据集中,有可变的动作(它的值是 0 和 1)。不是组变量,但只能删除ZERO(0)动作变量类别的异常值。
在R语言中,这被决定为
remove_outliers <- function(x, 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
}
new <- remove_outliers(vpg$stuff)
vpg=cbind(new,vpg)
【问题讨论】:
-
到目前为止你有什么尝试?
-
你看过 Percentile Rank 函数吗? link
-
您真正应该发布的是表定义、示例数据和所需的输出。百分位是什么?这是一个很好的起点。 spaghettidba.com/2015/04/24/…
-
@user1443098 你能把它用在我的数据上吗?
-
@ecp 我试着像在 R 语言中那样做,function(x, na.rm = TRUE, ...) { qnt (qnt[2] + H)]
标签: sql r sql-server data-science sqldf