On 03/18/2010 04:05 PM, duncandonutz wrote:
I know one of R's advantages is it's ability to index, eliminating the need for control loops to select relevant data, so I thought this problem would be easy. I can't crack it. I have looked through past postings, but nothing seems to match this problem I have a data set with one column of actors and one column of acts. I need a list that will give me a pair of actors in each row, provided they both participated in the act. Example: The Data looks like this: Jim A Bob A Bob C Larry D Alice C Tom F Tom D Tom A Alice B Nancy B I would like this: Jim Bob Jim Tom Bob Alice Larry Tom Alice Nancy The order doesn't matter (Jim-Bob vs. Bob-Jim), but each pairing should be counted only once.
Hi duncandonutz, Try this: actnames<-read.table("junkfunc/names.dat",stringsAsFactors=FALSE) actorpairs<-NULL for(act in unique(actnames$V2)) { actors<-actnames$V1[actnames$V2 == act] nactors<-length(actors) if(nactors > 1) { indices<-combn(nactors,2) for(i in 1:dim(indices)[2]) actorpairs<- rbind(actorpairs,c(actors[indices[1,i]],actors[indices[2,i]])) } } actorpairs Jim ______________________________________________ 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.