Я пытаюсь удалить выбросы из моего информационного кадра, содержащего x
и y
переменные, сгруппированные по переменной cond
.
Я создал функцию для удаления выбросов на основе статистики по коробочному графику и возврата df
без выбросов.Функция работает хорошо, когда применяется для необработанных данных.Однако, если применить к сгруппированным данным, функция не работает, и я получил ошибку:
Error in mutate_impl(.data, dots) :
Evaluation error: argument "df" is missing, with no default.
Пожалуйста, как я могу исправить мою функцию, чтобы в качестве аргументов были взяты векторы df$x
и df$y
,и правильно ли избавляться от выбросов по группам?
Мои фиктивные данные:
set.seed(955)
# Make some noisily increasing data
dat <- data.frame(cond = rep(c("A", "B"), each = 22),
xvar = c(1:10+rnorm(20,sd=3), 40, 10, 11:20+rnorm(20,sd=3), 85, 115),
yvar = c(1:10+rnorm(20,sd=3), 200, 60, 11:20+rnorm(20,sd=3), 35, 200))
removeOutliers<-function(df, ...) {
# first, identify the outliers and store them in a vector
outliers.x<-boxplot.stats(df$x)$out
outliers.y<-boxplot.stats(df$y)$out
# remove the outliers from the original data
df<-df[-which(df$x %in% outliers.x),]
df[-which(df$y %in% outliers.y),]
}
# REmove outliers (try if function works)
removeOutliers(dat)
# Apply the function to group
# Not working!!!
dat_noOutliers<- dat %>%
group_by(cond) %>%
mutate(removeOutliers)
Iнашли эту функцию для удаления выбросов из векторных данных.Однако я хотел бы удалить выбросы из векторов df$x
и df$y
в кадре данных.
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
}
( удалить выбросы по группе в R )