[R] Converting a data frame with values into a matrix/
    Srinivas Iyyer 
    srini_iyyer_bio at yahoo.com
       
    Wed Mar 12 18:19:44 CET 2008
    
    
  
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
    
    
More information about the R-help
mailing list