[R] Using indexing to manipulate data

Dimitris Rizopoulos d.rizopoulos at erasmusmc.nl
Thu Mar 18 09:22:47 CET 2010

One approach is the following:

Dat <- read.table(textConnection(
"Jim         A
Bob        A
Bob        C
Larry      D
Alice      C
Tom       F
Tom       D
Tom       A
Alice      B
Nancy    B"))
names(Dat) <- c("name", "act")

out <- tapply(as.character(Dat$name), Dat$act, function (x) {
     if (length(x) < 2) c(x, "") else t(combn(x, 2))
unique(do.call(rbind, out))

I hope it helps.


On 3/18/2010 6:05 AM, 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.
> Thanks!

Dimitris Rizopoulos
Assistant Professor
Department of Biostatistics
Erasmus University Medical Center

Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
Tel: +31/(0)10/7043478
Fax: +31/(0)10/7043014

More information about the R-help mailing list