首页 > 解决方案 > 带有“开放”边界的 R 剪切、中断和分位数

问题描述

我需要根据我的数据的某个子集计算断点并将其应用于我的整个数据集。因此,例如,该子集的第 3 和第 7 个十分位数应该是我的断点。

我基本上想要的是一个左右“开放”边界的分位数函数。例如

  quantile(0:10, probs= c(0, 0.3, 0.7, 1))
  0%  30%  70% 100% 
   0    3    7   10 

但我只想在我的剪切函数中使用断点 3 和 7,然后将我的向量分组。

我现在意识到我的问题没有经过深思熟虑。更清楚地说:我们的子集向量是 0:10 而不是我们有断点(3 和 7),但我想将这些断点应用于更大的向量,例如

    c(-5:12)
 [1] -5 -4 -3 -2 -1  0  1  2  3  4  5  6  7  8  9 10 11 12

我的目标是以这样一种方式切割这个向量,使低于 3 的所有内容(我的原始向量的第三个十分位数)都在一个组中。3 到 7 之间的所有内容都在第二组中,7 以上的所有内容都在一组中。所以总体上三个组基于另一个向量定义的切点。

有人可以帮我吗?亲切的问候

标签: rdata.table

解决方案


您所描述的听起来不像是开放的边界,而是将切点从一个数据集应用到另一个数据集。为什么不直接使用这些值本身?

v1 <- c(0:10)
v2 <- c(-5:12)

q1 <- quantile(v1, probs = c(0, 0.3, 0.7, 1))
q2 <- quantile(v2, probs = c(0, which(v2 == q1[2])/length(v2)
   , which(v2 == q1[3])/length(v2), 1), type=3)

q2
       0%       50% 72.22222%      100% 
       -5         3         7        12

推荐阅读