2014-12-07 2 views
0

У меня есть список с несколькими наблюдениями и их оценкой, так что, когда я смотрю на смотровой, например,Определение квартили наблюдения в R

Var_1["obs_50"] 

это дает мне счет

obs_50 
    12 

Можно ли также знать, в каком квартиле находится оценка этого конкретного наблюдения?

ответ

2

Казалось бы, у вас есть именованный вектор. Вам нужно будет рассчитать межквартильные разрывы с квантилем, а затем выяснить, где сидит ваше наблюдение. Функция findInterval полезна для второй части.

findInterval(Var_1["obs_50"], quantile(Var_1, c(0, .25, .5, .75, 1)) 

Я сделал, как идея определении ntile функции, как упомянуто @ epid10 в его теперь уже удален dplyr ответ.

# edited to fix missing parens and to now correct ntile for max value: 
ntile <- function (obs, var, n_breaks) { 
     findInterval(obs, 
         quantile(var, seq(0,1,length=n_breaks+1), 
         right.closed=TRUE)) } 
1

Вы можете использовать cut для дискретизации вектора, например .:

set.seed(11) 
print(x <- rnorm(20)) 
## [1] -0.59103110 0.02659437 -1.51655310 -1.36265335 1.17848916 -0.93415132 
## [7] 1.32360565 0.62491779 -0.04572296 -1.00412058 -0.82843324 -0.34835173 
## [13] -1.53829340 -0.25556525 -1.14994503 0.-0.22296954 0.88777165 
## [19] -0.59215528 -0.65571812 
cut(x, breaks = quantile(x, seq(0, 1, by = 0.25)), 
    include.lowest = TRUE, labels = FALSE) 
## 2 4 1 1 4 2 4 4 3 1 2 3 1 3 1 3 3 4 2 2 

Если вы не хотите, чтобы дискретизация, вы можете также использовать rank:

rank(x)/length(x) 
## [1] 0.50 0.80 0.10 0.15 0.95 0.30 1.00 0.85 0.70 0.25 0.35 0.55 0.05 0.60 0.20 
## [16] 0.75 0.65 0.90 0.45 0.40 
Смежные вопросы