Вменяя выбросы в таблицу после их идентификации
Я написал функцию, используя эту статью ( http://www.questionflow.org/2017/12/26/combined-outlier-detection-with-dplyr-and-ruler/), которую я нашел в Интернете, которая помечает любые выбросы в моем Таблицы основаны на том, что они находятся за пределами порога z-показателя или за пределами 1,5*IQR. Я хочу улучшить свою функцию, добавив "вменяемый" аргумент, который может быть установлен как среднее значение, медиана или режим (или ни одного, в этом случае вывод - просто таблица логических элементов), который будет устанавливать значения, помеченные как входной аргумент для этого столбца. Как я могу сделать это? Мой код до сих пор:
# Detecting outliers based on two outlier metrics (3 out of z-score or 1.5 out of IQR)
# Defining the functions to detect outliers
isnt_out_z <- function(x, thres = 3, na.rm = TRUE) {
abs(x - mean(x, na.rm = na.rm)) <= thres * sd(x, na.rm = na.rm)
}
isnt_out_IQR <- function(x, k = 1.5, na.rm = TRUE) {
quar <- quantile(x, probs = c(0.25, 0.75), na.rm = na.rm)
iqr <- diff(quar)
(quar[1] - k * iqr <= x) & (x <= quar[2] + k * iqr)
}
# Column-based non-outlier rows: row is not an outlier based on some column if it doesn't contain outlier (computed based on target column) on the intersection with that column
## Useable functions
find_Outliers <- function(data, method = 'z', impute = none) {
if (method == 'z') {
data %>%
transmute_if(is.numeric, isnt_out_z)
} else {
data %>%
transmute_if(is.numeric, isnt_out_IQR)
}
}