关于缺失值和 NaN 的上限函数 returns 错误?

Capping function returns error about missing values and NaN's?

我正在尝试使用以下函数来限制一些异常值,以便我的数据集整洁:

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
}

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

"Error in quantile.default(x, c(0.05, 0.25, 0.75, 0.95)) : missing values and NaN's not allowed if 'na.rm' is FALSE"

我使用的数据集确实有缺失值,我想忽略它们以执行此功能。我已经尝试将 na.rm = TRUE 插入函数本身的特定部分,但似乎无法得出任何不是上述错误消息的结果。

quantileIQR 中使用 na.rm = T 应该可以解决您的问题:

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)