2011-10-21 44 views
1

我正在爲兩個矩陣運行double forloop。但一個矩陣約有90,000行。 它是太慢了在R.所以,如果可能的話,我想採用應用函數。在R forloop中應用函數

  1. 一個矩陣每行有90,000個X 1列和字符串信息。例如1行值(ID)AAAA12
  2. 另一個矩陣也有大約90,000個,但是大於90,000個X 2列,所以對於一行(ID)在第一列具有AAAA23並且對應的月份信息例如AAAA23一月 並且第二行,AAAA12二月...等

所以,我想合併一列匹配的月份信息從第二矩陣到第一席。

輸出墊的第一行將是2月份的AAAA12而不是使用循環,我該如何快速生成這樣的矩陣?

任何輸入都會有幫助。

回答

3

下可能做的伎倆:

m1 <- matrix(c('AAAA12', 'AAAA23', 'AAAA14')) 
m2 <- cbind(c('AAAA23', 'AAAA12', 'AAAA14'), c('Jan', 'Feb', 'Mar')) 

cbind(m1, m2[match(m1[,1], m2[,1]),2]) 

,讓你

 [,1]  [,2] 
[1,] "AAAA12" "Feb" 
[2,] "AAAA23" "Jan" 
[3,] "AAAA14" "Mar" 

...然後在它的時序圍繞90000行顯示大約需要0.04秒:

x <- outer(outer(outer(LETTERS, LETTERS, paste, sep=''), 
       LETTERS, paste, sep=''), 1:5, paste, sep='') 
set.seed(42) 
m1 <- matrix(sample(x, 85000)) 
m2 <- cbind(x, seq_along(x)) 

system.time(cbind(m1, m2[match(m1[,1], m2[,1]),2])) # 0.04 seconds 
2

apply將不會快於for -loop。您需要mergematch