确定R中观测值的四分位数

时间:2014-12-07 21:00:44

标签: r

我有一个包含多个观察及其分数的列表,所以当我查看观察结果时,

Var_1["obs_50"]

它给了我分数

obs_50 
   12 

是否有可能知道这个特定观察的得分在哪个四分位数?

2 个答案:

答案 0 :(得分:2)

看起来你有一个命名向量。您需要使用分位数计算四分位数间隔,然后确定您的观察位置。 findInterval函数对第二部分很有用。

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

我确实喜欢在他现在删除的dplyr答案中定义@ epid10所提到的ntile函数。

 # 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 :(得分: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.01232697 -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