On Mon, 27 Aug 2007, [EMAIL PROTECTED] wrote:

> Dear R-users,
>
> For a data frame (say in this example X) I want to look up the
> corresponding value in a 'look-up data frame' (in this example Y). The
> for-loop works but is very time-consuming because 'X' in reality is very
> big.
> Therefore I would like to have a solution with apply. However, I do not
> succeed. Any suggestions?
>
> Thanks in advance,
>
> Hanneke
>
> c1=c('a','a','b')
> c2=c('j','k','k')
>
> V1=c('a','a','a','a','b','b','b','b'))

        You have a syntax error in the previous line - '))'


> V2=c('i','j','k','l','i','j','k','l')
> V3=c(4,3,2,1,8,5,2,-1)
>
>
> X=NULL
> X$c1=c1
> X$c2=c2
> X=as.data.frame(X)
> Y=NULL
> Y$V1=V1
> Y$V2=V2
> Y$V3=V3
> Y=as.data.frame(Y)
>
> result=NULL
> for (i in 1:dim(X)[1])
> {
> result=rbind(result, Y$V3[which(Y$V1==as.character(X[i,]$c1) &
> Y$V2==as.character(X[i,]$c2))])
> }
>
> #######
> which.search=function(X,Y,c1,c2,V1,V2,V3)
> Y$V3[which(Y$V1==as.character(X$c1) & Y$V2==as.character(X$c2))]
>
> apply(X,1,which.search,X=X,Y=Y,c1='c1',c2='c2',V1='V1',V2='V2',V3='V3')

........^................^^^...

You use X twice in this expression. If you delete 'X=X,' and revise 
which.search to

  which.search <- function( X, Y, c1, c2, V1, V2, V3 )
         Y$V3[ which( Y$V1==as.character( X[c1] ) &
                      Y$V2 == as.character( X[ c2 ] ) ) ]

to get rid of the $ operator which is deprecated for atomic vectors,

(and fix the above syntax error) then this expression agrees with 'result'

If you know that the matches are unique (only one row in Y will match any 
row of X), then

        match( paste( X$c1, X$c2 ) , paste( Y$V1, Y$V2 ))

will be fast.

If nrow(Y) is small,

        which(
                outer(Y$V1, as.character(X$c1), "==" ) &
                        outer(Y$V2, as.character(X$c2), "==" ),
              arr.ind = TRUE )

will also be quick.


Otherwise something like

        unlist( lapply( paste( X$c1, X$c2 ), match, paste( Y$V1, Y$V2 )) )

may be a good bet.


Please learn to use the space key to format your code in a more readable 
fashion!


HTH,

Chuck

>
> ###
>> sessionInfo()
> R version 2.5.1 (2007-06-27)
> i386-pc-mingw32
>
> locale:
> LC_COLLATE=Dutch_Netherlands.1252;LC_CTYPE=Dutch_Netherlands.1252;LC_MONETARY=Dutch_Netherlands.1252;LC_NUMERIC=C;LC_TIME=Dutch_Netherlands.1252
>
> attached base packages:
> [1] "stats"     "graphics"  "grDevices" "utils"     "datasets"  "methods"
> "base"
>
> ______________________________________________
> R-help@stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

Charles C. Berry                            (858) 534-2098
                                             Dept of Family/Preventive Medicine
E mailto:[EMAIL PROTECTED]                  UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/  La Jolla, San Diego 92093-0901

______________________________________________
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to