2013-07-04 3 views
0

데이터 프레임의 각 행에있는 매개 변수 값을 다른 모든 행의 동일한 매개 변수 값과 비교하려고합니다. 결과는 각 행과 각 행의 교집합에서 TRUE/FALSE 인 행렬입니다. 루프 기반 방식으로이를 구현하는 것은 매우 간단하지만 대규모 데이터 프레임으로 처리하는 데 너무 많은 시간이 걸립니다. 나는이 코드를 "벡터화"(적용 사용?)하고 처리 코드의 속도를 높이는 방법에 대해 비우는 중입니다. 미리 감사드립니다.데이터 프레임의 값 비교를 벡터화합니다.

지금까지 사용한 코드.

#dim matrix 
adjm<- matrix(0,nrow=nrow(df),ncol=nrow(df)) 

#score 
for(i in 1:nrow(df)){ 
    for(t in 1:nrow(df)){ 
    adjm[t,i]=df$varA[i]==df$varA[t] 
    } 
} 

답변

1
apply

:

apply(df,1,function(x) x[1] == df$varA) # `1` should be column number for `varA` 

을하지만 기술적으로 벡터화 아니에요.

3

당신은 당신의 코드를 예를 들어

outer(df$varA, df$varA, "==") 

를 벡터화 outer을 사용할 수 있습니다

df <- data.frame(varA = c(1, 2, 1, 3, 4, 2)) 

outer(df$varA, df$varA, "==") 
##  [,1] [,2] [,3] [,4] [,5] [,6] 
## [1,] TRUE FALSE TRUE FALSE FALSE FALSE 
## [2,] FALSE TRUE FALSE FALSE FALSE TRUE 
## [3,] TRUE FALSE TRUE FALSE FALSE FALSE 
## [4,] FALSE FALSE FALSE TRUE FALSE FALSE 
## [5,] FALSE FALSE FALSE FALSE TRUE FALSE 
## [6,] FALSE TRUE FALSE FALSE FALSE TRUE 
관련 문제