我想用NA替换数据框每列中的异常值。
例如,如果我们将离群值定义为离均值大于3个标准差的任何值,我可以使用以下代码实现此每个变量。
我希望在一个调用中对df
的所有列执行相同的操作,而不是单独指定每个列。关于如何执行此操作的任何指示?
谢谢!
library(dplyr)
data("iris")
df <- iris %>%
select(Sepal.Length, Sepal.Width, Petal.Length)%>%
head(10)
# add a clear outlier to each variable
df[1, 1:3] = 99
# replace values above 3 SD's with NA
df_cleaned <- df %>%
mutate(Sepal.Length = replace(Sepal.Length, Sepal.Length > (abs(3 * sd(df$Sepal.Length, na.rm = TRUE))), NA))
答案 0 :(得分:3)
您需要使用mutate_all()
,即
library(dplyr)
df %>%
mutate_all(funs(replace(., . > (abs(3 * sd(., na.rm = TRUE))), NA)))
答案 1 :(得分:1)
另一个选项是base R
df[] <- lapply(df, function(x) replace(x, . > (abs(3 * sd(x, na.rm = TRUE))), NA))
或与colSds
中的matrixStats
一起
library(matrixStats)
df[df > abs(3 * colSds(as.matrix(df), na.rm = TRUE))] <- NA