Tidyverse 过滤异常值 - 在一根管道中

问题描述 投票:0回答:1

我想在一根管道中过滤 tidyverseframe 工作中的异常值。 此示例中的异常值仅定义为

Q1 - 1.5 * IQR
Q3 + 1.5 * IQR
。 Q1 为 25% 百分位数,Q3 为 75% 百分位数。 IQR 是四分位距,
IQR = Q3 - Q1

我设法计算了离群值的上限和下限,并且我熟悉 dplyr 中的

filter()
函数。但是我不知道如何将同一管道操作中汇总内计算的值返回到完整的 data.frame

iris %>% 
  group_by(Species) %>% 
  # filter(API_Psy_dm <=)
  summarise(IQR = IQR(Sepal.Length),
            O_upper =quantile(Sepal.Length, probs=c( .75), na.rm = FALSE)+1.5*IQR,  
            O_lower =quantile(Sepal.Length, probs=c( .25), na.rm = FALSE)-1.5*IQR  
  )

这可能吗?或者我需要第二根管道吗?或者有没有比自己计算上下限更方便的方法?

r tidyverse outliers
1个回答
5
投票

使用

mutate
代替
summarize
,然后
filter
:

iris %>% 
  group_by(Species) %>% 
  mutate(IQR = IQR(Sepal.Length),
            O_upper = quantile(Sepal.Length, probs=c( .75), na.rm = FALSE)+1.5*IQR,  
            O_lower = quantile(Sepal.Length, probs=c( .25), na.rm = FALSE)-1.5*IQR  
  ) %>% 
  filter(O_lower <= Sepal.Length & Sepal.Length <= O_upper)
© www.soinside.com 2019 - 2024. All rights reserved.