r - 删除异常值
问题描述
我有一个包含 2000 多个观测值的大型数据集。数据涉及动物组织中的毒素浓度。我的响应变量是myRESULT
,并且我对每个ANALYTE
感兴趣的都有多个观察结果。ANALYTE
我需要从每个组中删除异常值,这些异常值由距离平均值超过三个 SD 的数字定义。
虽然我意识到我不应该正常地从数据集中删除异常值,但我仍然想知道如何在 R 中做到这一点。
这是我的数据的一小部分:
解决方案
它是按组划分的,可以通过不同的方式完成。使用 dplyr,您group_by
可以设置分组,然后设置filter
行子集,传递给它一个表达式,该表达式将计算TRUE
要保留的行和FALSE
异常值的返回值。
例如,使用iris
和 2 个标准差(一切都在 3 以内):
library(dplyr)
iris_clean <- iris %>%
group_by(Species) %>%
filter(abs(Petal.Length - mean(Petal.Length)) < 2*sd(Petal.Length))
iris_clean %>% count()
#> # A tibble: 3 x 2
#> # Groups: Species [3]
#> Species n
#> <fct> <int>
#> 1 setosa 46
#> 2 versicolor 47
#> 3 virginica 47
使用基础 R 中的拆分应用组合方法,
do.call(rbind, lapply(
split(iris, iris$Species),
function(x) x[abs(x$Petal.Length - mean(x$Petal.Length)) < 2*sd(x$Petal.Length), ]
))
推荐阅读
- python - Scrapy 中的代理配置
- python - 如果第一个和最后一个元素相等,则完整列表
- java - 如何在 Java 中隐藏枚举值?
- string - 搜索字符串并列出与该字符串匹配的所有句子
- php - 在这种情况下是否可以动态加载正确大小的图像?
- constraints - 需要审查调度模型逻辑、创建约束的建议和语法错误的修复
- bash - WSL Bash 权限被拒绝创建文件和目录
- node.js - 通过 Express.JS 路由器将数据添加到 Mongo 数组中
- adb - 使用 ADB 的双向 IPC 通信
- spring - Spring Boot 不显示实现自定义 ErrorController 的错误页面