如何在多列中有条件地使用NA替换值

问题描述 投票:1回答:2

我想用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))
r replace dplyr na
2个回答
4
投票

你需要使用mutate_all(),即

library(dplyr)

df %>% 
 mutate_all(funs(replace(., . > (abs(3 * sd(., na.rm = TRUE))), NA)))

1
投票

另一种选择是base R

df[] <- lapply(df, function(x) replace(x, . > (abs(3 * sd(x, na.rm = TRUE))), NA))

或者来自colSdsmatrixStats

library(matrixStats)
df[df > abs(3 * colSds(as.matrix(df), na.rm = TRUE))] <- NA
© www.soinside.com 2019 - 2024. All rights reserved.