封顶函数返回有关缺失值和NaN的错误?

时间:2019-04-26 12:23:19

标签: r na outliers quantile

我正在尝试使用以下函数来封闭一些异常值,以使我的数据集整齐:

cap <- function(x){
    quantiles <- quantile(x, c(.05, 0.25, 0.75, .95))
    x[x < quantiles[2] - 1.5*IQR(x)] <- quantiles[1]
    x[x > quantiles[3] + 1.5*IQR(x)] <- quantiles[4]
    x
}

但是,似乎每次我尝试使用它时,都会收到以下错误:

  

“分位数错误。默认值(x,c(0.05,0.25,0.75,0.95)):丢失   值和NaN(如果'na.rm'为FALSE,则不允许)“

我正在使用的数据集确实缺少值,为了执行此功能,我想忽略它们。我尝试将na.rm = TRUE插入到函数本身的特定部分中,似乎无法获得不是上述错误消息的任何结果。

1 个答案:

答案 0 :(得分:0)

na.rm = Tquantile内使用IQR应该可以解决您的问题:

cap <- function(x){
  quantiles <- quantile(x, c(.05, 0.25, 0.75, 0.95), na.rm = T)
  x[x < quantiles[2] - 1.5 * IQR(x, na.rm = T)] <- quantiles[1]
  x[x > quantiles[3] + 1.5 * IQR(x, na.rm = T)] <- quantiles[4]
  return(x)
}

以下是一些测试数据:我在末尾添加了两个异常值(10和-20)以及一个NA。 替换了两个离群值,NA不被替换:

set.seed(1)
x <- c(rnorm(100), 10, -20, NA_real_)
cap(x)