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.