[R] Converting a data frame with values into a matrix/

John Kane jrkrideau at yahoo.ca
Wed Mar 12 19:21:54 CET 2008


Oops, I just realised that you asked for a matrix not
a data.frame  Substituing for the last three lines of
code

final <- as.matrix(aba)
colnames(final)  <-  aa$Name
rownames(final) <- mm1$Class

should do it.
--- John Kane <jrkrideau at yahoo.ca> wrote:

> The way that you have set up the data.frame is
> rather
> unusual. It makes NES a factor which I suspect you
> don't want. Do str(xx) to see what I mean
> 
> Here is a way that I think does what you want but
> with
> the data.frame constructed in a different manner. 
> Again do str(aa) to see the difference
>
=====================================================
> aa <- data.frame(Name=c( "Mike" ,"Carl", "Gene",
> "James","Dough"),
>          Class=c(  "A",  "A",  "C",  "A",  "B"),
>          NES=c( 0.01, 0.2, 0.3, -0.3, 0) )  
> aa
>          
> library(reshape)
> mm  <- melt(aa, id=c("Name", "Class"))
> mm1  <- cast(mm, Class~Name)
> 
> aba <- mm1[,2:6]
> aba[is.na(aba)] <- 1
> 
> final <- data.frame(mm1$Class, aba)
> names(final) <- names(mm1) 
> final
> 
> ===================================================
> 
> --- Srinivas Iyyer <srini_iyyer_bio at yahoo.com>
> wrote:
> 
> > Dear Group, 
> > I have a data frame like the following:
> > 
> > 
> > x <- c("Mike","A",0.01)
> > x1 <- c("Carl","A",0.2)
> > x2 <- c("Gene","C",0.3)
> > x3 <- c("James","A",-0.3)
> > x4 <- c("Dough","B",0)
> > xx <- rbind(x,x1,x2,x3,x4)
> > colnames(xx)<-c("Name","Class","NES")
> > xx <-as.data.frame(xx)
> > 
> > > xx
> >     Name Class  NES
> > x   Mike     A 0.01
> > x1  Carl     A  0.2
> > x2  Gene     C  0.3
> > x3 James     A -0.3
> > x4 Dough     B    0
> > 
> > 
> > Now I want to create a matrix with unique xx$Name
> on
> > columns and unique xx$Class as rows.  I want to
> fill
> > my choice of values (in this case 1) if data point
> > not
> > available. 
> > 
> > 
> > xy <-
> >
>
matrix(1,length(unique(xx$Class)),length(unique(xx[,1])))
> > colnames(xy)<-unique(xx[,1])
> > rownames(xy)<-unique(xx$Class)
> > 
> > > xy
> >   Mike Carl Gene James Dough
> > A    1    1    1     1     1
> > C    1    1    1     1     1
> > B    1    1    1     1     1
> > 
> > 
> > 
> > 
> > 
> > I would love to have :
> > 
> >   Mike Carl Gene James Dough
> > A    0.01    0.2    1     -0.3     1
> > C    1    1    1     0.3     1
> > B    1    1    1     1    0
> > 
> > 
> > 
> > 
> > If I am not wrong this is called contigency or
> > frequeny table. 
> > 
> > I tried xtabs on this.  
> > 
> > > z <- xtabs(NES ~ Name+Class,data=xx)
> > Error in Summary.factor(4L, na.rm = FALSE) : 
> >   sum not meaningful for factors
> > 
> > 
> > I tried on other data frames, it worked. BUT the
> > problem is it gives me 0.0000 even a value is not
> > available for that row and column.  So if I have
> > data
> > -0.00 it is considered 0. 
> > 
> > I tried. drop.unused.levels = T, I did not get
> what
> > I
> > want. I want all row.col values not available to
> be
> > 1.
> > 
> > 
> > Is there any other trick where I map by row and
> > column
> > names instead of using advanced xtabs. 
> > 
> > thanks
> > Srini
> > 
> > ______________________________________________
> > 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.
> 



[[elided trailing spam]]



More information about the R-help mailing list