[英]Determining the quartile of an observation in R
我有一个包含多个观测值及其分数的列表,因此当我查找观测值时,例如,
Var_1["obs_50"]
它给了我分数
obs_50
12
是否有可能也知道该特定观测值的分数在哪四分之一?
看来您有一个命名向量。 您将需要使用分位数计算四分位数间隔,然后找出观察结果所在的位置。 findInterval
函数对于第二部分很有用。
findInterval(Var_1["obs_50"], quantile(Var_1, c(0, .25, .5, .75, 1) )
我确实喜欢定义@@ pidd10在他现在删除的dplyr答案中提到的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)) }
您可以使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.