On 10/04/2013 11:59 AM, Paul Miller wrote:
Hello All,

Am learning to create tables with n(%) formatting using R. Below is a working 
example. I think this is not bad but wondered if there are better ways of doing 
it. Although it can be quite humbling, seeing good code helps me assess my 
progress as an R programmer.

Ultimately want to have code that I can turn into a function. Will then use the 
output produced to make tables using odfWeave and Sweave/knitr.

Thanks,

Paul

breaks <- as.data.frame(lapply(warpbreaks, function(x) rep(x, 
warpbreaks$breaks)))

Freq <- with(breaks, addmargins(table(wool, tension), 2))
Prop <- round( prop.table(Freq, 2) * 100, 2 )
Freq <- addmargins(Freq, 1)
Prop <- addmargins(Prop, 1)

require(odfWeave)
class(Freq) <- "character"
class(Prop) <- "character"
FreqProp <- matrixPaste(Freq, "(", Prop, "%)", sep = c("", "", ""))
colnames(FreqProp) <- colnames(Freq)
rownames(FreqProp) <- rownames(Freq)
names(dimnames(FreqProp)) <- c("Wool", "")

FreqProp <- data.frame(Wool=rownames(FreqProp), FreqProp, row.names=NULL, 
stringsAsFactors=FALSE)
names(FreqProp)[names(FreqProp) == "Sum"] <- "Total"
FreqProp$Wool[FreqProp$Wool == "Sum"] <- "Total"
FreqProp

This might not be very useful for you, but the tables package can calculate proportions and percentages directly from the data. It can produce LaTeX output, but doesn't have formatting functions for HTML or odf. Still, you might use it for the computing, then output .csv and format it later. For example, you get a table something like the one produced above from the breaks dataframe using

tabular((wool + 1) ~ (tension + 1)*((Count=1) + Percent("col")), data=breaks)

It's possible to get the formatting closer to what you had with fiddling, but not easy to do it in a way that looks good in all possible output formats.

Duncan Murdoch

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

Reply via email to