如何在 R 中有效地对大整数向量进行分类

How to categorize a large integer vector efficiently in R

我有一个大整数向量(部分数据如下所示):

a <- c(0,0,0,1,1,2,2,2,4,4,7,7,7,35,50,50, 200,200,500,500,500, 2500,2501,2502,2502)

我想创建另一个向量(向量 b),将向量 a 值分类到 bin 中。向量 a 值 0 - 6 的类别值应为 1,7 - 13 的类别值为 2,14 - 20 的类别值为 3 ...

我知道我可以使用 dplyr case_when() 函数进行变异,但是当数据很大时它可能效率不高。

将数值数据分类到具有数值输出值的范围内的最佳方法是 findInterval 函数。示例:

> a <- c(0,0,0,1,1,2,2,2,4,4,7,7,7,35,50,50, 200,200,500,500,500, 2500,2501,2502,2502)
> findInterval( a, c(0, 6, 12, 18, 24))
 [1] 1 1 1 1 1 1 1 1 1 1 2 2 2 5 5 5 5 5 5 5 5 5 5 5 5
> findInterval( a, 6^(0:6))
 [1] 0 0 0 1 1 1 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 5 5 5 5
> 6^(0:6)
[1]     1     6    36   216  1296  7776 46656

请注意,第二个参数中低于最小值的项目返回的值为 0,高于最大值的项目的值是 vec(即中断)向量的长度。间隔是左闭右开,这与 cut 函数的行为相反(除非被参数更改)。