我有一个包含多个观察及其分数的列表,所以当我查看观察结果时,
Var_1["obs_50"]
它给了我分数
obs_50
12
是否有可能知道这个特定观察的得分在哪个四分位数?
答案 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