2014-10-28 91 views
-2

我有超過1,000,000個數字的列表。我有一個查詢表,它有一系列的數字和一個類別。例如,0-200是類別A,201-650是類別B(範圍長度不等)使用R查找大量值的最快方法是什麼?

我需要簡單地遍歷1,000,000個數字的列表並獲取1,000,000個對應類別的列表。

編輯:

例如,我的列表中的前幾個元素 - 100,125.5,807.5,345.2,它應該返回類似1,1,8,4作爲類別。該映射的邏輯是在功能實現 - 和我使用下面的命令來獲得類別

cats <- sapply(list.cd, categoryLookup) 

然而,儘管這似乎是對規模高達名單迅速查明瞭10000,這是整個列表花費了大量的時間。

做同樣的最快方法是什麼?是否有任何形式的索引可以幫助加快流程?

+2

也許看看'?cut'及其參數'breaks'和'labels'? – Henrik 2014-10-28 07:36:36

+2

要獲得更具體的答案,請在您的問題中更具體,即發佈一個最小可重現的例子:包括您的「列表」和「查找表」的_minimal_版本,所需的結果,並顯示您嘗試過的代碼。 – Henrik 2014-10-28 07:48:41

+0

只有你的數字**整數**嗎? – Spacedman 2014-10-28 08:33:03

回答

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)。 (已經在上面的例子中編輯過)。在這種情況下,你的起始座標應該是而不是一個

+0

非常感謝。回答這些問題時,我真的不應該着急。 – 2014-10-28 08:09:09

+0

在這種情況下,第一個起始座標應該是1,而不是0(如OP示例中所示) – 2014-10-28 08:09:44

+0

但是,您的解決方案假定「數字」是整數,而「數字」可能是未分類的數字向量OP需要根據它們落入的範圍將其分類到組中。我想這是由OP提供更多關於他們有什麼和他們期望的細節的。 – jbaums 2014-10-28 08:12:57

相關問題