【问题标题】:How to conditionally replace values with NA across multiple columns如何在多列中有条件地用 NA 替换值
【发布时间】:2019-09-08 18:04:01
【问题描述】:

我想用 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


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      你需要使用mutate_all(),即

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

      【讨论】:

      • 解决了!我以为我已经尝试过 mutate_all 但事实证明我的点在错误的地方。感谢您的帮助。
      猜你喜欢
      • 1970-01-01
      • 2020-03-14
      • 2016-01-21
      • 1970-01-01
      • 2020-04-29
      • 2014-08-23
      • 1970-01-01
      • 2021-07-03
      相关资源
      最近更新 更多