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.

Reply via email to