How about this? system.time(out <- data.table(id=seq(vec2), val=vec2, key="val")[J(vec1)][, list(list(id)), by=val]$V1) user system elapsed 0.098 0.004 0.103
Arun On Sunday, August 25, 2013 at 10:27 PM, arun wrote: > Hi, > I tried a ?data.table() method to solve the problem in the link below. > > http://r.789695.n4.nabble.com/how-to-combine-apply-and-which-or-alternative-ways-to-do-so-td4674424.html#a4674434 > > But, it was not that fast. > > set.seed(24) > vec1<- sample(1e5,1e3,replace=FALSE) > set.seed(48) > vec2<- sample(1e3,1e6,replace=TRUE) > system.time({res1<- tapply(vec1,1:1e3,FUN=function(i) {which(vec2==i)})}) # > user system elapsed > # 3.912 0.000 3.880 > > system.time(res2<- sapply(vec1,function(x) which(vec2%in%x))) > # user system elapsed > # 24.368 0.000 23.247 > vecR1<-unlist(res1) > names(vecR1)<-NULL > vecR2<- unlist(res2) > identical(vecR1,vecR2) > #[1]TRUE > > library(data.table) > dt1<- data.table(vec1,Group=1:1e3,key='Group') > system.time({res3<- dt1[,list(list(which(vec1==vec2))),by=Group]})##Not that > fast > # user system elapsed > # 3.756 0.120 3.886 ###### > identical(vecR1,unlist(res3$V1)) > #[1] TRUE > > > > Is there a faster way? > > Thanks. > > A.K. > _______________________________________________ > datatable-help mailing list > [email protected] > (mailto:[email protected]) > https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help > >
_______________________________________________ datatable-help mailing list [email protected] https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/datatable-help
