В моем столбце в 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
Я должен удалить выброс из переменной вещи, но отдельно по группе 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)