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@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.