我正在尝试使用以下函数来封闭一些异常值,以使我的数据集整齐:
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
插入到函数本身的特定部分中,似乎无法获得不是上述错误消息的任何结果。
答案 0 :(得分:0)
在na.rm = T
和quantile
内使用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)