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.lowest
和 right
参数来更改处理落在 bin 边界上的点的方式。
我正在寻找数据框中一列中的最小数字,该数字大于另一个数组中的数字。
例子
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.lowest
和 right
参数来更改处理落在 bin 边界上的点的方式。