首页 > 解决方案 > 识别异常值并仅在 R 中使用 groupby 多列处理异常值?

问题描述

我想用多列分组识别异常值,并用 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)
}

我已经尝试像下面这样用 group by 估算异常值:

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

哪里出错了?建议我。

标签: rgroup-byoutliers

解决方案


您应该将功能更改为:

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))

推荐阅读