# [R] Transform pairwise observations into a table

arun smartpink111 at yahoo.com
Tue Oct 2 05:51:14 CEST 2012

```HI David,

Third and fourth solutions looks very interesting.

with(dat1,tapply(coef,list(ind1,ind2),function(x) x))
# also gave the same result.
# I tried with aggregate() and ddply(), but may be not as elegant solution as yours.

matrix(with(dat1,aggregate(coef,list(ind1,ind2),FUN=function(x) x)[,3]),nc=4)
library(plyr)
matrix(ddply(dat1,.(ind1,ind2),FUN=function(x) x\$coef)[,3],nc=4)
#      [,1]  [,2]  [,3] [,4]
#[1,] 1.000 0.250 0.125  0.5
#[2,] 0.250 1.000 0.125  0.5
#[3,] 0.125 0.125 1.000  0.5
#[4,] 0.500 0.500 0.500  1.0
A.K.

----- Original Message -----
From: David Winsemius <dwinsemius at comcast.net>
To: arun <smartpink111 at yahoo.com>
Cc: "Hadjixenofontos, Athena" <AHadjixenofontos at med.miami.edu>; R help <r-help at r-project.org>; Bert Gunter <gunter.berton at gene.com>
Sent: Monday, October 1, 2012 10:33 PM
Subject: Re: [R] Transform pairwise observations into a table

On Oct 1, 2012, at 2:30 PM, arun wrote:

> HI AHJ,
> No problem.
>
> One more way in addition to reshape() (Rui's suggestion) to get the same result.
> library(reshape)
>
> as.matrix(cast(melt(dat1,id=c("ind1","ind2")),ind1~ind2,value="value"))
> #      1     2     3   4
> #1 1.000 0.250 0.125 0.5
> #2 0.250 1.000 0.125 0.5
> #3 0.125 0.125 1.000 0.5
> #4 0.500 0.500 0.500 1.0
> A.K.
>
That looks a tad ... well, ... complicated. So perhaps these base-only solutions with tapply might be more accessible: Some of them do border on the whimsical, I will admit:

with (dat1, tapply(coef, list(ind1,ind2), I))

with (dat1, tapply(coef, list(ind1,ind2), c))

with (dat1, tapply(coef, list(ind1,ind2), "^", 1))

with (dat1, tapply(coef, list(ind1,ind2), "+", 0))

It is a specific response to the request for a `table`-like function tha twouldallow the application of other functions. Cnage the `1` to `2` in the third instance and you get the tabulated squares. And do not forget the availability of `ftable` to flatten the output of `tapply` retunred values.

--
David.
>
>
> ----- Original Message -----
> To: arun <smartpink111 at yahoo.com>
> Cc: R help <r-help at r-project.org>
> Sent: Monday, October 1, 2012 12:59 PM
> Subject: Re: [R] Transform pairwise observations into a table
>
> Thank you. I had looked at xtabs but misunderstood the syntax. This is great. :)
>
> AHJ
>
>
>
> On Oct 1, 2012, at 12:53 PM, "arun" <smartpink111 at yahoo.com> wrote:
>
>> Hi,
>> Try this:
>>
>> ind1 ind2 coef
>> 1 1 1
>> 1 2 0.25
>> 1 3 0.125
>> 1 4 0.5
>> 2 2 1
>> 2 1 0.25
>> 2 3 0.125
>> 2 4 0.5
>> 3 3 1
>> 3 1 0.125
>> 3 2 0.125
>> 3 4 0.5
>> 4 4 1
>> 4 1 0.5
>> 4 2 0.5
>> 4 3 0.5
>> mat1<-as.matrix(xtabs(coef~ind1+ind2,data=dat1))
>>
>> #    ind2
>> #ind1     1     2     3     4
>>    # 1 1.000 0.250 0.125 0.500
>>     #2 0.250 1.000 0.125 0.500
>>     #3 0.125 0.125 1.000 0.500
>>     #4 0.500 0.500 0.500 1.000
>>
>> A.K.
>>
>>
>>
>> ----- Original Message -----
>> From: AHJ <ahadjixenofontos at med.miami.edu>
>> To: r-help at r-project.org
>> Cc:
>> Sent: Monday, October 1, 2012 12:17 PM
>> Subject: [R] Transform pairwise observations into a table
>>
>> Hi,
>>
>> I have a table of pairs of individuals and a coefficient that belongs to the
>> pair:
>>
>> ind1    ind2    coef
>> 1    1    1
>> 1    2    0.25
>> 1    3    0.125
>> 1    4    0.5
>> 2    2    1
>> 2    1    0.25
>> 2    3    0.125
>> 2    4    0.5
>> 3    3    1
>> 3    1    0.125
>> 3    2    0.125
>> 3    4    0.5
>> 4    4    1
>> 4    1    0.5
>> 4    2    0.5
>> 4    3    0.5
>>
>> And I want to convert it to a matrix where each individual is both a row and
>> a column and at the intersection of each pair is the coefficient that
>> belongs to that pair:
>>
>>      1           2           3             4
>> 1    1           0.25           0.125    0.5
>> 2    0.25      1           0.125    0.5
>> 3    0.125    0.125    1            0.5
>> 4    0.5           0.5           0.5            1
>>
>> If table() would allow me to specify something other than frequencies to
>> fill the table with, it would be what I need. I tried a few different
>> combinations of t() and unique() but none of it made enough sense to post as
>> my starting code... I am just lost. Any help would be greatly appreciated.
>>
>> Thank you,
>> AHJ
>>
>>
>>
>> --
>> View this message in context: http://r.789695.n4.nabble.com/Transform-pairwise-observations-into-a-table-tp4644706.html
>> Sent from the R help mailing list archive at Nabble.com.
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help