2011-10-21 2 views
1

두 개의 행렬에 대해 double forloop을 실행했습니다. 하나의 행렬에는 약 90,000 개의 행이 있습니다. R에서이 너무 느림 입니다. 가능한 경우이 기능을 적용하고 싶습니다.forloop의 함수를 R에 적용하십시오

  1. 하나의 행렬에는 행당 문자열 정보가있는 90,000 개의 x1 열이 있습니다. 예를 들면 1 row의 값 (ID) AAAA12
  2. 또 다른 행렬은 약 90,000이지만 X는 90,000 개가 넘기 때문에 한 행 (ID)의 경우 첫 번째 열에 AAAA23이 있고 해당 달의 정보가 AAAA23입니다. 예 : AAAA23 Jan 두 번째 행 , AAAA12 Feb ... etc

따라서 두 번째 행렬의 일치하는 월 정보 1 열을 첫 번째 행까지 병합하고 싶습니다.

출력 매트의 첫 번째 행은 for 루프를 사용하는 대신 Feb. AAAA12가 될 것입니다. 어떻게 그러한 행렬을 빠르게 생성 할 수 있습니까?

모든 입력 사항이 유용 할 것입니다.

답변

3

다음은 트릭을 할 수있는 다음

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 
: 90000 행 주위가 약 0.04 초 정도 걸립니다 보여줍니다 그것을 타이밍을 다음

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" 

을 제공합니다 ... 그리고

2

applyfor -loop보다 빠르지 않습니다. merge 또는 match이 필요합니다.

관련 문제