[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"))
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
More information about the R-help
mailing list