9

95 パーセンタイルを超えて 5 パーセンタイルを下回る値をとる比較的大きなRデータセットのすべての値を、それぞれそれらのパーセンタイル値に置き換えたいと思います。私の目的は、これらの外れ値をデータから完全に切り取らないようにすることです。

アドバイスをいただければ幸いです。他の場所でこれを行う方法に関する情報は見つかりません。

4

4 に答える 4

21

これで十分です。

fun <- function(x){
    quantiles <- quantile( x, c(.05, .95 ) )
    x[ x < quantiles[1] ] <- quantiles[1]
    x[ x > quantiles[2] ] <- quantiles[2]
    x
}
fun( yourdata )
于 2012-11-12T07:32:47.910 に答える
12

次を使用して、1行のコードで実行できますsquish()

d2 <- squish(d, quantile(d, c(.05, .95)))



はかりライブラリで、?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)))

例:

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
于 2012-11-12T08:01:18.647 に答える
3

私はあなたが必要とするものを得るためにこのコードを使用しました:

qn = quantile(df$value, c(0.05, 0.95), na.rm = TRUE)
df = within(df, { value = ifelse(value < qn[1], qn[1], value)
                  value = ifelse(value > qn[2], qn[2], value)})

dfdata.frameとvalue、データを含む列はどこにありますか。

于 2012-11-12T07:34:22.627 に答える