Hi. This is a suggestion for present a bidimensional contingency table in rkward using an R function.
The function take a xtable as argument and returns a html code to put in the rk_out.html This is the function: html.crosstab <- function(x, calcs="") { row.sum <- margin.table(x,1) row.sum.p <- (row.sum / sum(row.sum)) * 100 row.sum.p <- paste(round(row.sum.p, 2), "%") col.sum <- margin.table(x,2) col.sum.p <- (col.sum / sum(col.sum)) * 100 col.sum.p <- paste(round(col.sum.p, 2), "%") #calcule the props for analysis if("t" %in% calcs) tot.p.x <- round(prop.table(x)*100, 2) if("r" %in% calcs) row.p.x <- round(prop.table(x, 1)*100, 2) if("c" %in% calcs) col.p.x <- round(prop.table(x, 2)*100, 2) #Begin to write the table t <- "<table border=1>" #Header t <- paste(t, "<tr><td colspan=2>Tabla</td><td colspan=", dim(x)[2], ">", attr(dimnames(x)[2], "names"), "</td><td rowspan=2>Frecuencia</td><td rowspan=2>Porcentaje</td></tr>", sep="") t <- paste(t, "<tr><td colspan=2>", attr(dimnames(x)[1], "names"), "</td>", sep="") t <- paste(t, paste("<td>", dimnames(x)[[2]], "</td>", sep="", collapse=""), sep="") t <- paste(t, "</tr>", sep="") #Make the rows for each variable for (i in 1:dim(x)[1]) { ifelse(calcs[1] != "", rowspanData <- paste(" rowspan=", length(calcs)+1), rowspanData <- "") t <- paste(t, "<tr><td", rowspanData,">", dimnames(x)[[1]][i], "</td><td>Freq</td>", sep="") t <- paste(t, paste("<td>", x[i,], "</td>", sep="", collapse=""), sep="") t <- paste(t, "<td", rowspanData, ">", row.sum[i],"</td>", "<td", rowspanData,">", row.sum.p[i],"</td>") t <- paste(t, "</tr>", sep="") if("t" %in% calcs) t <- paste(t, "<tr><td>Total%</td>", paste("<td>", tot.p.x[i,]," %</td>", sep="", collapse=""), "</tr>") if("r" %in% calcs) t <- paste(t, "<tr><td>Fila%</td>", paste("<td>", row.p.x[i,]," %</td>", sep="", collapse=""), "</tr>") if("c" %in% calcs) t <- paste(t, "<tr><td>Col%</td>", paste("<td>", col.p.x[i,]," %</td>", sep="", collapse=""), "</tr>") } t <- paste(t, "<tr><td colspan=2>Frecuencia</td>", paste("<td>", col.sum,"</td>", sep="", collapse=""), "<td>", sum(col.sum), "</tr>", sep="") t <- paste(t, "<tr><td colspan=2>Porcentaje</td>", paste("<td>", col.sum.p,"</td>", sep="", collapse=""),"</td></tr>", sep="") #End of Table t <- paste(t, "</table>", sep="") t } takes two arguments: x: a contingency table or crosstabulation (xtable) calcs: a vector containing the characters c (for column percentage), r (row%), t (total%) and/or e (chisq expected, not implemented) here is an example of usage: # First make the data gender <- rbinom(100,1,0.5) gender <- factor(gender, labels=c("male", "female")) opinion <- rbinom(100,3,0.25) opinion <- factor(opinion, labels=c("very bad", "bad", "good", "excellent")) # Now make the crosstab, I prefer xtabs instead of table tab <- xtabs(~ opinion + gender) # And now print the table # The output will include row and column percentage rk.results(html.crosstab(tab, calcs=c("r", "c")) I hope that you like this function and wish that could be include in the N to 1 Crosstabulation plugin. If you like this function I expect coments or suggestions. -- Amor y Paz _ _ \\ // _ \\// \\ ^^> \____/ CHAU ------------------------------------------------------------------------------ What You Don't Know About Data Connectivity CAN Hurt You This paper provides an overview of data connectivity, details its effect on application quality, and explores various alternative solutions. http://p.sf.net/sfu/progress-d2d _______________________________________________ RKWard-devel mailing list RKWard-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rkward-devel