[英]Find quantile-class for a sample value in R
我有这个分位数的数字向量:
c(`0%` = -3.375, `10%` = 0.399999999999999, `20%` = 0.9299, `30%` = 1.25425,
`40%` = 1.5333, `50%` = 1.77835, `60%` = 2.0138, `70%` = 2.26495,
`80%` = 2.5633, `90%` = 3.2, `100%` = 10)
#
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
-3.37500 0.40000 0.92990 1.25425 1.53330 1.77835 2.01380 2.26495 2.56330 3.20000 10.00000
而且我也确实有一个像7.2
这样的值。 现在我想找到匹配组,使得该值大于下限且小于或等于上限。 什么是有效的(任何)检查方法?
没有做过详尽的测试,这是你想要的吗?
> head(x[x>1],1)
30%
1.25425
和
> head(x[x>3],1)
90%
3.2
不确定这是否是您要找的?
library(data.table)
# create a data.table
lookup <- as.data.table(my.v, keep.rownames = TRUE)
# create some handy extra columns
lookup[, `:=`(rn2 = shift(rn, type= "lead"),
val2 = shift(my.v, type= "lead"))]
# create data.table with value to look up
DT <- data.table(value = 7.2)
# perform non-equi join
DT[lookup, `:=`(cat = paste(i.rn, i.rn2, sep = "-")),
on = .(value >= my.v, value < val2)][]
value cat
1: 7.2 90%-100%
您可以使用findInterval
进行二进制搜索。
v <- 7.2
i <- findInterval(v, x)
x[i:(i+1)]
# 90% 100%
# 3.2 10.0
数据
x <- c(`0%` = -3.375, `10%` = 0.399999999999999, `20%` = 0.9299, `30%` = 1.25425,
`40%` = 1.5333, `50%` = 1.77835, `60%` = 2.0138, `70%` = 2.26495,
`80%` = 2.5633, `90%` = 3.2, `100%` = 10)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.