Introduction
In R, there are several ways to generate tables. while the table()
function generates tables with absolute numbers, the prop.table()
function returns tables with relative values (percentages). However, I couldn't find a function to return a table with both absolute and relative values.
In this blog post, I show how to generate such a table.
Generate a random dataframe
In the first code snippet, we generate a random dataframe with two variables: Sex and Age. As you can see, generating random dataframes is very easy and straightforward with Tyler Rinker's Wakefield package.
library(wakefield) df <- r_data_frame(n=200, sex, age)
Write the function
My function tab.func()
combines three R functions:
describe()
from the Hmisc package to return an object of class describe containing absolute and relative frequency values of a factor variable. To access these values, we need to subset this object using$values
. This will return a matrix with the desired values.t()
to transpose this matrix, and-
as.table()
to transform this matrix into a table.
tab.func <- function (x) { y <- as.table(t(Hmisc::describe(x)$values)) colnames(y) <- c('**n**', '**%**') return(y) }
(UPDATE: In version 4 of the Hmisc
package, the describe()
function was rewritten. My function only works up to version 3.17.4)
The double asterisks around n and % are Markdown code used to return bold text.
Deploy the function
In the following code snippet, we deploy this function to a categorial variable (Sex) which is part of the dataframe df.
mytable <- tab.func(df$Sex) knitr::kable(mytable, caption = 'Table with absolute numbers and percentages')
n | % | |
---|---|---|
A | Male, Female | 96, 104 |
Finaly, we print this table with the kable()
function from the knitr package.