r - 在 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
解决方案
我们可以filter
使用if_all/across
library(dplyr)
df %>%
filter(if_all(where(is.numeric), ~ (.>= (quantile(., .25) - IQR(.) * 1.5 )) &
(.<= (quantile(., .75) + IQR(.) * 1.5 ))))
推荐阅读
- angular - 在角材料sidenav结构中嵌入页面
- python - 将自定义级别记录到不同的文件
- ibm-mobilefirst - MobileFirst 8.0 的灾难恢复设计
- group-by - 在confluent kafka ksql中按column_name进行分组时名称为空错误
- javascript - Javascript 函数限制
- c# - 如果 BinaryWriter 只打开,则关闭它
- android - Ionic pro 框架错误 InAppBillingService 不存在 - Android Build
- javascript - React Native - 来自休息的 FlatList 数据仅显示一半
- mysql - 没有中间表的雄辩的多对多关系
- java - 如何在肥皂请求中设置时区