如何用R中的第5和第95百分位值替换异常值

Bob*_*bbo 5 r dataset outliers quantile

我想替换我的相对较大的R数据集中的所有值,这些数据集的值分别高于95和低于第5百分位数,并且分别具有那些百分位数值.我的目标是避免完全从数据中简单地裁剪这些异常值.

任何建议将不胜感激,我找不到任何其他地方如何做到这一点的信息.

Rom*_*ois 16

这样做会.

fun <- function(x){
    quantiles <- quantile( x, c(.05, .95 ) )
    x[ x < quantiles[1] ] <- quantiles[1]
    x[ x > quantiles[2] ] <- quantiles[2]
    x
}
fun( yourdata )
Run Code Online (Sandbox Code Playgroud)


Ric*_*rta 7

您可以使用squish()以下代码在一行代码中执行以下操作:

d2 <- squish(d, quantile(d, c(.05, .95)))
Run Code Online (Sandbox Code Playgroud)



在比例库中,查看?squish?discard

#--------------------------------
library(scales)

pr <- .95
q  <- quantile(d, c(1-pr, pr))
d2 <- squish(d, q)
#---------------------------------

# Note: depending on your needs, you may want to round off the quantile, ie:
q <- round(quantile(d, c(1-pr, pr)))
Run Code Online (Sandbox Code Playgroud)

例:

d <- 1:20
d
# [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20


d2 <- squish(d, round(quantile(d, c(.05, .95))))
d2
# [1]  2  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 19
Run Code Online (Sandbox Code Playgroud)