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"))
closeAllConnections()
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.

Best,
Dimitris


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

______________________________________________
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