加盖函数返回有关缺失值和NaN的错误?

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

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

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
}

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

“在quantile.default中出错(x,c(0.05,0.25,0.75,0.95)):如果'na.rm'为FALSE则不允许缺少值和NaN”

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

r na outliers quantile
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.