2011-10-21 42 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