Определить выбросы и обработать только выбросы с несколькими столбцами в R? - PullRequest
0 голосов
/ 19 апреля 2020

Я хочу идентифицировать выбросы с группой по нескольким столбцам и обработать выбросы значениями 95% и 5%. Я создал функцию для обработки выбросов, как показано ниже.

fun_name <- function(data,x){
  qnt <- quantile(data$x, probs=c(.25, .75), na.rm = T)
  caps <- quantile(data$x, probs=c(.05, .95), na.rm = T)
  H <- 1.5 * IQR(data$x, na.rm = T)
  data[which(data$x < (qnt[1] - H)),"x"] <- caps[1]
  data[which(data$x > (qnt[2] + H)),"x"] <- caps[2]
  return(data)
}

Я пытался, как показано ниже, вменять выбросы с помощью группы:

total_data <- data%>%
  group_by(col1,col2,col3,col4)%>%
  mutate(fun_name(data,col5)) ## col5 is of numric type.

Я получаю ошибку:

Column `fun_name(data,col5)` is of unsupported class data.frame

Где я ошибся? предложи мне.

1 Ответ

0 голосов
/ 19 апреля 2020

Вы должны изменить функцию на:

fun_name <- function(x){
   qnt <- quantile(x, probs=c(.25, .75), na.rm = TRUE)
   caps <- quantile(x, probs=c(.05, .95), na.rm = TRUE)
   H <- 1.5 * IQR(x, na.rm = TRUE)
   x[which(x < (qnt[1] - H))] <- caps[1]
   x[which(x > (qnt[2] + H))] <- caps[2]
   return(x)
}

и затем использовать ее как:

library(dplyr)
data%>% group_by(col1,col2,col3,col4)%>% mutate(col = fun_name(col5))
...