[R] Using indexing to manipulate data

Jim Lemon jim at bitwrit.com.au
Thu Mar 18 09:32:37 CET 2010


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



More information about the R-help mailing list