我想在一根管道中过滤 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
)
这可能吗?或者我需要第二根管道吗?或者有没有比自己计算上下限更方便的方法?
使用
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)