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.
Hi, Try this: dat1<-read.table(text=" 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 ",sep="",header=TRUE) 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 PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
Hadjixenofontos, Athena
2012-Oct-01 16:59 UTC
[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: > > dat1<-read.table(text=" > 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 > ",sep="",header=TRUE) > 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 > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >
Hello, Try the following. dat <- read.table(text=" 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 ", header=TRUE) dat reshape(dat, v.names = "coef", idvar = "ind1", timevar = "ind2", direction = "wide") Hope this helps, Rui Barradas Em 01-10-2012 17:17, AHJ escreveu:> 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 > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
You might be amused by this alternative: with(dat1,matrix(coef[order(ind2,ind1)],nr=4,nc=4)) It works because matrices are vectors stored in column major order. Cheers, Bert On Mon, Oct 1, 2012 at 9:53 AM, arun <smartpink111 at yahoo.com> wrote:> Hi, > Try this: > > dat1<-read.table(text=" > 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 > ",sep="",header=TRUE) > 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 > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > > > ______________________________________________ > R-help at 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.-- Bert Gunter Genentech Nonclinical Biostatistics Internal Contact Info: Phone: 467-7374 Website: http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm