繁体   English   中英

在 R 中查找样本值的分位数类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM