38.6 Descriptive Tables
Export APA theme
Export to Latex
print(xtable::xtable(mtcars, type = "latex"),
file = file.path(getwd(), "output", "mtcars_xtable.tex"))
# American Economic Review style
stargazer::stargazer(
mtcars,
title = "Testing",
style = "aer",
out = file.path(getwd(), "output", "mtcars_stargazer.tex")
)
# other styles include
# Administrative Science Quarterly
# Quarterly Journal of Economics
However, the above codes do not play well with notes. Hence, I create my own custom code that follows the AMA guidelines
ama_tbl <- function(data, caption, label, note, output_path) {
library(tidyverse)
library(xtable)
# Function to determine column alignment
get_column_alignment <- function(data) {
# Start with the alignment for the header row
alignment <- c("l", "l")
# Check each column
for (col in seq_len(ncol(data))[-1]) {
if (is.numeric(data[[col]])) {
alignment <- c(alignment, "r") # Right alignment for numbers
} else {
alignment <- c(alignment, "c") # Center alignment for other data
}
}
return(alignment)
}
data %>%
# bold + left align first column
rename_with(~paste("\\multicolumn{1}{l}{\\textbf{", ., "}}"), 1) %>%
# bold + center align all other columns
`colnames<-`(ifelse(colnames(.) != colnames(.)[1],
paste("\\multicolumn{1}{c}{\\textbf{", colnames(.), "}}"),
colnames(.))) %>%
xtable(caption = caption,
label = label,
align = get_column_alignment(data),
auto = TRUE) %>%
print(
include.rownames = FALSE,
caption.placement = "top",
hline.after=c(-1, 0),
# p{0.9\linewidth} sets the width of the column to 90% of the line width, and the @{} removes any extra padding around the cell.
add.to.row = list(pos = list(nrow(data)), # Add at the bottom of the table
command = c(paste0("\\hline \n \\multicolumn{",ncol(data), "}{l} {", "\n \\begin{tabular}{@{}p{0.9\\linewidth}@{}} \n","Note: ", note, "\n \\end{tabular} } \n"))), # Add your note here
# make sure your heading is untouched (because you manually change it above)
sanitize.colnames.function = identity,
# place a the top of the page
table.placement = "h",
file = output_path
)
}