Thanks for the attempt and required output. How about this? firststep = DT[,cbind(expand.grid(B,B),v=1/length(B)),by=C][Var1!=Var2] setkey(firststep,Var1,Var2,C) firststep = firststep[,transform(.SD,cv=cumsum(v)),by=list(Var1,Var2)] setkey(firststep,Var1,Var2,C) DT[, {x=data.table(expand.grid(B,B),C[1]-1L) firststep[x,roll=TRUE,nomatch=0][,sum(cv)] # prior familiarity },by=C] C V1 [1,] 1999 0.0 [2,] 2001 0.5 [3,] 2004 2.5
I think you may have said you have large data. If so, this method should be fast. Please let us know how you get on. HTH Matthew On Thu, 17 Feb 2011 23:07:19 -0800, mathijsdevaan wrote: > OK, for the last step I have tried this (among other things): > library(data.table) > DT = data.table(read.table(textConnection(" A B C 1 1 a 1999 > 2 1 b 1999 > 3 1 c 1999 > 4 1 d 1999 > 5 2 c 2001 > 6 2 d 2001 > 7 3 a 2004 > 8 3 b 2004 > 9 3 d 2004"),head=TRUE,stringsAsFactors=FALSE)) > > firststep = DT[,cbind(expand.grid(B,B),v=1/length(B)),by=C][Var1!=Var2] > setkey(firststep,Var1,Var2) > list1<-firststep[J(expand.grid(DT$B,DT$B),v=1/length(DT$B)),nomatch=0] [,sum(v)] > list1 > #27 > > What I would like to get: > list > 1 0 > 2 0.5 > 3 2.5 > > Thanks! ______________________________________________ R-help@r-project.org 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.