【问题标题】:using ifelse to remove outliers [duplicate]使用 ifelse 删除异常值 [重复]
【发布时间】:2020-08-02 01:02:39
【问题描述】:

我想根据下面的函数去除异常值,即xhigh值。

   low <- median(x, na.rm=TRUE)-5*(mad(x)) 
   high <- median(x, na.rm=TRUE)+5*(mad(x))   
   out <- if_else(x > high, NA_real_,ifelse(x < low, NA_real_, x)) 
   out }

x>high 的值被替换为 NA,但 x

【问题讨论】:

  • 欢迎来到 Stack Overflow!帮助我们帮助您:提供minimal reproducible example。特别是,如果您可以 edit 您的问题包含 R 命令的输出 dput(x) 以显示您遇到此问题的数据,这将很有帮助。
  • 您是否在这里查看了我的以下答案?如果它确实有效,您也可以接受这个答案。

标签: r if-statement outliers


【解决方案1】:

试试:

low <- median(x, na.rm=TRUE) - 5*(mad(x)) 
high <- median(x, na.rm=TRUE) + 5*(mad(x))
x[x > high | x < low] <- NA
x

【讨论】:

    【解决方案2】:

    这对我来说似乎很好用,但我不明白你为什么将if_else 和ifelse 混为一谈:

    set.seed(42)
    x <- c(rnorm(85, 50, 3), rnorm(15, 50, 15))
    summary(x)
    #    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    #   28.11   47.78   50.41   50.23   52.19   70.88 
    low <- median(x, na.rm=TRUE)-5*(mad(x)) 
    high <- median(x, na.rm=TRUE)+5*(mad(x))   
    out <- if_else(x > high, NA_real_,ifelse(x < low, NA_real_, x)) 
    # Note this would be simpler: out <- ifelse(x > high | x < low, NA_real_, x) 
    out[x > high]
    # [1] NA NA
    out[x < low]
    # [1] NA NA
    

    【讨论】:

      猜你喜欢
      • 2018-02-24
      • 1970-01-01
      • 2016-06-20
      • 1970-01-01
      • 2016-06-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      相关资源
      最近更新 更多