我有超过1,000,000个号码的列表。我有一个包含一系列数字和类别的查找表。例如,0-200是A类,201-650是B类(范围不等长)
我需要简单地遍历1,000,000个数字列表,并获得1,000,000个相应类别的列表。
修改
例如,我列表的前几个元素是 - 100,125.5,807.5,345.2,它应该返回类似1,1,8,4的类别。映射的逻辑在函数中实现 - categoryLookup(cd)
我正在使用以下命令来获取类别
cats <- sapply(list.cd, categoryLookup)
然而,虽然这似乎可以在大小高达10000的列表上快速工作,但整个列表需要花费大量时间。
最快的方法是什么?是否有任何形式的索引可以帮助加快这一过程?
答案 0 :(得分:1)
数字:
numbers <- sample(1:1000000)
基团:
groups <- sort(rep(letters, 40000))
查找
categories <- groups[numbers]
编辑:
如果您还没有“群组”矢量,可以先创建它。
假设您有包含范围信息的数据框:
ranges <- data.frame(group=c("A","B","C"),
start=c(0,300001,600001),
end=c(300000,600000,1000000)
)
ranges
group start end
1 A 1 3e+05
2 B 300001 6e+05
3 C 600001 1e+06
# if groups are sorted and don't overlap:
groups <- rep(ranges$group, (ranges$end-ranges$start)+1)
然后像以前一样继续
categories <- groups[numbers]
编辑:正如@jbaums所说 - 在这种情况下,您必须将 +1 添加到(范围$ end-ranges $ start)。 (已在上面的示例中编辑过)。同样在这种情况下,您的起始坐标应为 1 而不是 0