首页 > 解决方案 > 在 R 中使用 map 函数进行过滤

问题描述

我正在尝试过滤数据框的多列 (15)。具体来说,我想使用 Q3 + IQR 1.5 和 Q1 - IQR 1.5 方法删除异常值。

玩具示例:

library(tidyverse)
aa <- c(2,3,4,3,2,2,1,6,5,4,3,1,15)
bb <- c(0.2,20,30,40,30,20,20,10,30,40,30,10,10)
cc <- c(-9,2,3,4,3,2,2,1,5,4,3,1,25)

df <- tibble(aa,bb,cc)

我试过没有成功:

i <- NULL
for(i in 1:ncol(fat)){
   po <- fat %>% 
     filter(.[[i]] >= (quantile(.[[i]], .25) - IQR(.[[i]]) * 1.5))
   
   po <- fat %>% 
     filter(.[[i]] <= (quantile(.[[i]], .75) + IQR(.[[i]]) * 1.5))
}

我可以使用过滤器和地图功能来做到这一点吗?如何?

非常感谢 GS

标签: rdataframefilterpurrrtibble

解决方案


我们可以filter使用if_all/across

library(dplyr)
df %>%
    filter(if_all(where(is.numeric), ~ (.>= (quantile(., .25) - IQR(.) * 1.5 )) &
           (.<= (quantile(., .75) + IQR(.) * 1.5 ))))

推荐阅读