Furniture
The furniture R package contains table1 for publication-ready simple and stratified descriptive statistics, tableC for publication-ready correlation matrixes, and other tables #rstats
Install / Use
/learn @TysonStanley/FurnitureREADME
furniture: v1.11.0 <img src="man/figures/furniture_hex_v2_full.png" align="right" width="40%" height="40%" />
The furniture R package contains functions to help with data
cleaning/tidying (e.g., washer(), rowmeans(), rowsums()),
exploratory data analysis and reporting (e.g., table1(), tableC(),
tableF()). It currently contains eight main functions:
table1(): gives a well-formatted table for academic publication of descriptive statistics. Very useful for quick analyses as well. Notably,table1()now works withdplyr::group_by().tableC(): gives a well-formatted table of correlations.tableF(): provides a thorough frequency table for quick checks of the levels of a variable.washer(): changes several values in a variable (very useful for changing place holder values to missing).long(): is a wrapper ofstats::reshape(), takes the data from wide to long format (long is often the tidy version of the data), works well with the tidyverse, and can handle unbalanced multilevel data.wide(): also a wrapper ofstats::reshape(), takes the data from long to wide, and likelong(), works well with the tidyverse and can handle unbalanced multilevel data.rowmeans()androwmeans.n(): tidyverse friendly versions ofrowMeans(), where therowmeans.n()function allowsnnumber of missingrowsums()androwsums.n(): tidyverse friendly versions ofrowSums(), where therowsums.n()function allowsnnumber of missing
In conjunction with many other tidy tools, the package should be useful for health, behavioral, and social scientists working on quantitative research.
Installation
The latest stable build of the package can be downloaded from CRAN via:
install.packages("furniture")
You can download the developmental version via:
remotes::install_github("tysonstanley/furniture")
Using furniture
The main functions are the table*() functions (e.g., table1(),
tableC(), tableF()).
library(furniture)
data("nhanes_2010")
table1(nhanes_2010,
age, marijuana, illicit, rehab,
splitby=~asthma,
na.rm = FALSE)
#>
#> ───────────────────────────────────
#> asthma
#> Yes No
#> n = 251 n = 1164
#> age
#> 23.0 (3.9) 23.4 (4.0)
#> marijuana
#> Yes 131 (52.2%) 584 (50.2%)
#> No 97 (38.6%) 434 (37.3%)
#> NA 23 (9.2%) 146 (12.5%)
#> illicit
#> Yes 23 (9.2%) 117 (10.1%)
#> No 205 (81.7%) 901 (77.4%)
#> NA 23 (9.2%) 146 (12.5%)
#> rehab
#> Yes 10 (4%) 37 (3.2%)
#> No 121 (48.2%) 547 (47%)
#> NA 120 (47.8%) 580 (49.8%)
#> ───────────────────────────────────
table1(nhanes_2010,
age, marijuana, illicit, rehab,
splitby=~asthma,
output = "text2",
na.rm = FALSE)
#>
#> ───────────────────────────────────
#> asthma
#> Yes No
#> n = 251 n = 1164
#> --------- ----------- -----------
#> age
#> 23.0 (3.9) 23.4 (4.0)
#> marijuana
#> Yes 131 (52.2%) 584 (50.2%)
#> No 97 (38.6%) 434 (37.3%)
#> NA 23 (9.2%) 146 (12.5%)
#> illicit
#> Yes 23 (9.2%) 117 (10.1%)
#> No 205 (81.7%) 901 (77.4%)
#> NA 23 (9.2%) 146 (12.5%)
#> rehab
#> Yes 10 (4%) 37 (3.2%)
#> No 121 (48.2%) 547 (47%)
#> NA 120 (47.8%) 580 (49.8%)
#> ───────────────────────────────────
library(tidyverse)
nhanes_2010 %>%
group_by(asthma) %>%
table1(age, marijuana, illicit, rehab,
output = "text2",
na.rm = FALSE)
#>
#> ───────────────────────────────────
#> asthma
#> Yes No
#> n = 251 n = 1164
#> --------- ----------- -----------
#> age
#> 23.0 (3.9) 23.4 (4.0)
#> marijuana
#> Yes 131 (52.2%) 584 (50.2%)
#> No 97 (38.6%) 434 (37.3%)
#> NA 23 (9.2%) 146 (12.5%)
#> illicit
#> Yes 23 (9.2%) 117 (10.1%)
#> No 205 (81.7%) 901 (77.4%)
#> NA 23 (9.2%) 146 (12.5%)
#> rehab
#> Yes 10 (4%) 37 (3.2%)
#> No 121 (48.2%) 547 (47%)
#> NA 120 (47.8%) 580 (49.8%)
#> ───────────────────────────────────
table1() can do bivariate significance tests as well.
library(tidyverse)
nhanes_2010 %>%
group_by(asthma) %>%
table1(age, marijuana, illicit, rehab,
output = "text2",
na.rm = FALSE,
test = TRUE)
#>
#> ───────────────────────────────────────────
#> asthma
#> Yes No P-Value
#> n = 251 n = 1164
#> --------- ----------- ----------- -------
#> age 0.201
#> 23.0 (3.9) 23.4 (4.0)
#> marijuana 1
#> Yes 131 (52.2%) 584 (50.2%)
#> No 97 (38.6%) 434 (37.3%)
#> NA 23 (9.2%) 146 (12.5%)
#> illicit 0.623
#> Yes 23 (9.2%) 117 (10.1%)
#> No 205 (81.7%) 901 (77.4%)
#> NA 23 (9.2%) 146 (12.5%)
#> rehab 0.729
#> Yes 10 (4%) 37 (3.2%)
#> No 121 (48.2%) 547 (47%)
#> NA 120 (47.8%) 580 (49.8%)
#> ───────────────────────────────────────────
By default it does the appropriate parametric tests. However, you can
change that by setting param = FALSE (new with v 1.9.1).
library(tidyverse)
nhanes_2010 %>%
group_by(asthma) %>%
table1(age, marijuana, illicit, rehab,
output = "text2",
na.rm = FALSE,
test = TRUE,
param = FALSE,
type = "condense")
#>
#> ───────────────────────────────────────────────
#> asthma
#> Yes No P-Value
#> n = 251 n = 1164
#> ------------- ----------- ----------- -------
#> age 23.0 (3.9) 23.4 (4.0) 0.235
#> marijuana: No 97 (38.6%) 434 (37.3%) 1
#> illicit: No 205 (81.7%) 901 (77.4%) 0.623
#> rehab: No 121 (48.2%) 547 (47%) 0.729
#> ───────────────────────────────────────────────
It can also do a total column with the stratified columns (new with
v 1.9.0) with the total = TRUE argument.
nhanes_2010 %>%
group_by(asthma) %>%
table1(age, marijuana, illicit, rehab,
output = "text2",
na.rm = FALSE,
test = TRUE,
type = "condense",
total = TRUE)
#>
#> ────────────────────────────────────────────────────────────
#> asthma
#> Total Yes No P-Value
#> n = 1417 n = 251 n = 1164
#> ------------- ------------ ----------- ----------- -------
#> age 23.3 (4.0) 23.0 (3.9) 23.4 (4.0) 0.201
#> marijuana: No 532 (37.5%) 97 (38.6%) 434 (37.3%) 1
#> illicit: No 1107 (78.1%) 205 (81.7%) 901 (77.4%) 0.623
#> rehab: No 668 (47.1%) 121 (48.2%) 547 (47%) 0.729
#> ────────────────────────────────────────────────────────────
It can also report the statistics in addition to the p-values.
nhanes_2010 %>%
group_by(asthma) %>%
table1(age, marijuana, illicit, rehab,
output = "text2",
na.rm = FALSE,
test = TRUE,
total = TRUE,
type = "full")
#>
#> ─────────────────────────────────────────────────────────────────────────
#> asthma
#> Total Yes No Test P-Value
#> n = 1417 n = 251 n = 1164
#> --------- ------------ ----------- ----------- ---------------- -------
#> age T-Test: -1.28 0.201
#> 23.3 (4.0) 23.0 (3.9) 23.4 (4.0)
#> marijuana Chi Square: 0 1
#> Yes 716 (50.5%) 131 (52.2%) 584 (50.2%)
#> No 532 (37.5%) 97 (38.6%) 434 (37.3%)
#> NA 169 (11.9%) 23 (9.2%) 146 (12.5%)
#> illicit Chi Square: 0.24 0.623
#> Yes 141 (10%) 23 (9.2%) 117 (10.1%)
#> No 1107 (78.1%) 205 (81.7%) 901 (77.4%)
#> NA 169 (11.9%) 23 (9.2%) 146 (12.5%)
#> rehab Chi Square: 0.12 0.729
#> Yes 48 (3.4%) 10 (4%) 37 (3.2%)
#> No 668 (47.1%) 121 (48.2%) 547 (47%)
#> NA 701 (49.5%) 120 (47.8%) 580 (49.8%)
#> ─────────────────────────────────────────────────────────────────────────
`table1(
