R:将数字分组到箱子中

R: grouping numbers into bins

我正在寻找数据框中一列中的最小数字,该数字大于另一个数组中的数字。

例子
DistrDF

Bin Freq CumSum  
0.1 0.05 0.05  
0.2 0.07 0.12    
0.3 0.20 0.32  
0.4 0.10 0.42  
0.5 0.00 0.42   
0.6 0.15 0.57  
0.7 0.00 0.57  
0.8 0.30 0.87  
0.9 0.11 0.98  
1.0 0.02 1.0

然后我有一个数组,比如说,10 个介于 0 和 1 之间的随机数(即每个随机数将落入 DistrDF 中的一个容器)

RandNums
0.13
0.50
0.11
0.10
0.70
0.05
0.12
0.80
0.88
0.40

我想用这两个table创建第三个table,它指示每个随机数落入哪个bin,如下所示:

ResultDF  
0.30 (because 0.13 < 0.32 and 0.13 > 0.12)
0.60 (because 0.50 < 0.57 and 0.50 > 0.42)
...
0.30 (because 0.40 < 0.42 and 0.40 > 0.32)

有人有什么想法吗?我觉得 aggregate 或其他东西可能是合适的,但我不确定。

cut 函数可以满足您的需求:

DistrDF <- DistrDF[DistrDF$Freq > 0,]  # Remove empty bins
DistrDF$Bin[cut(x$RandNums, c(0, DistrDF$CumSum))]
# [1] 0.3 0.6 0.2 0.2 0.8 0.1 0.2 0.8 0.9 0.4

您可以操纵 include.lowestright 参数来更改处理落在 bin 边界上的点的方式。