[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