如何在 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
函数的行为相反(除非被参数更改)。
我有一个大整数向量(部分数据如下所示):
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
函数的行为相反(除非被参数更改)。