R带有“开放”边界的剪切,破坏和分位数

时间:2018-10-23 14:52:37

标签: r data.table

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

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

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

但是我只想在cut函数中使用断点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之上的所有元素都在一组中。因此,总共三组基于另一个矢量定义的切点。

有人可以帮我吗? 问候

2 个答案:

答案 0 :(得分:0)

开放边界是什么意思?低分数和高分数(低于0.3,高于0.7)会发生什么?

我认为您有两个选择,请参见下面的示例。首先,低分者和高分者被分配一个值。在第二个-Inf和Inf被从剪切点中删除,低和高得分者被分配为NA。

如果这不能回答您的问题,请您添加更多有关您希望看到的结果的详细信息?

# Determine cutpoints
cutPoints <- quantile(0:10, probs= c(0, 0.3, 0.7, 1))

# Option 1 - Low and highs get assigned a value
cut(0:10, breaks = cutPoints, labels = FALSE, include.lowest = TRUE)

# Option 2 - Low and highs get assigned NA
cutPoints <- cutPoints[2:(length(cutPoints)-1)] # Remove -Inf and Inf
cut(0:10, breaks = cutPoints, labels = FALSE, include.lowest = TRUE)

答案 1 :(得分:0)

您所描述的听起来不像是开放边界,仅是将一个数据集的切点应用于另一个数据集。为什么不自己使用这些值呢?

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