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.