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

Henrique Dallazuanna wwwhsd at gmail.com
Wed Mar 12 18:57:12 CET 2008


Try:

xy <- with(xx, tapply(NES, list(Class, Name), paste))
xy[is.na(xy)] <- 1

On 12/03/2008, Srinivas Iyyer <srini_iyyer_bio at yahoo.com> wrote:
> Hi Henrique,
>  Thanks for your tip.
>
>
>  how can I map xx onto xy (where xy is a matrix I
>  created).
>
>
>
>  > >  > xy
>     Mike Carl Gene James Dough
>  A    1    1    1     1     1
>  C    1    1    1     1     1
>  B    1    1    1     1     1
>
>
>
> If I can map xx onto xy, I can have '1' without NAs.
>
>  Thanks
>  Srini
>
>
>
>
>  --- Henrique Dallazuanna <wwwhsd at gmail.com> wrote:
>
>  > Perhaps in this case:
>  >
>  > noquote(with(xx, tapply(NES, list(Class, Name),
>  > paste)))
>  >
>  >
>  > On 12/03/2008, 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.
>  > >
>  >
>  >
>  > --
>  > Henrique Dallazuanna
>  > Curitiba-Paraná-Brasil
>  > 25° 25' 40" S 49° 16' 22" O
>  >
>
>
>
>
>       ____________________________________________________________________________________
>  Never miss a thing.  Make Yahoo your home page.
>  http://www.yahoo.com/r/hs
>


-- 
Henrique Dallazuanna
Curitiba-Paraná-Brasil
25° 25' 40" S 49° 16' 22" O



More information about the R-help mailing list