Я новичок в программировании на R и застрял с проблемой. Я хочу обнаружить и затем переименовать выбросы в набор данных как «NA», но не смог найти способ сделать это правильно. Я преобразую свой набор данных с функцией melt в длинный формат, а затем использую функцию «isnt_out_tukey» (правило 1.5xIQR) из (http://www.questionflow.org/2017/12/26/combined-outlier-detection-with-dplyr-and-ruler/).
) В результате получается новый столбец с логическими выражениями («TRUE», «FALSE "). Но мне нужно, чтобы в этом новом столбце остались все значения, не являющиеся выбросами (isnt_out_tukey), и установите все выбросы на" NA ".
Исключение выбросов должно быть сгруппировано по c_year, country и variable!
Второй вопрос, который носит более общий характер: как выполнить функцию выброса только для определенных переменных (строк) в столбце «переменная» (т. Е. Только для var_01 и var_02) и оставить другие значения без изменений вНедавно созданный столбец.
Любая помощь высоко ценится!
library(dplyr)
library(reshape2)
isnt_out_tukey <- 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)
}
set.seed(23)
df <- data.frame(
c_year= c("2014", "2015", "2015", "2015", "2014", "2015", "2014", "2014",
"2015", "2014", "2015", "2015", "2014", "2014", "2015", "2014", "2015"),
group = c("0","0","1","0","1","0","1","1","1","1","1", "0", "1",
"1","0","1","1"),
country = c("A", "B", "C", "B", "A", "C", "B", "C", "B", "C", "B", "A",
"B", "A", "C", "B", "C"),
var_01 = c(rnorm(15), 2, 5),
var_02 = c(rnorm(16), 18),
var_03 = c(rnorm(15), 2.5, 10),
var_04 = c(rnorm(14), 2, 3, 6),stringsAsFactors = F)
df_long <- melt(df, id.vars = c("c_year", "group", "country"),
variable.name = "variable", value.name = "variable_value")
df_long <- df_long %>%
group_by(c_year, country, variable) %>%
mutate(out_removal = isnt_out_tukey(variable_value))