我有2000多个观测值的大型数据集。数据涉及动物组织中的毒素浓度。我的响应变量是myRESULT
,并且每个感兴趣的ANALYTE
有多个观察值。我需要从每个ANALYTE
组中删除离均值超过3个SD的异常值。
虽然我意识到我通常不应该从数据集中删除异常值,但我仍然想知道如何在R中做到这一点。
这只是我数据的一小部分:
答案 0 :(得分:3)
它是按组的子集,可以用不同的方式完成。使用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), ]
))