使用R查找大量值的最快方法是什么?

时间:2014-10-28 07:22:20

标签: r

我有超过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的列表上快速工作,但整个列表需要花费大量时间。

最快的方法是什么?是否有任何形式的索引可以帮助加快这一过程?

1 个答案:

答案 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