3
votes

I'm using Rmarkdown to produce a PDF of frequency tables. Producing a complex frequency table after running freq from questionr and adding row groupings with group_rows leads to an alignment problem on the last line of the first group. Reproducible example here:

---
output:
   pdf_document:
      latex_engine: xelatex
      fig_caption: true
---
```{r}
library(haven)
library(questionr)
library(dplyr)
library(magrittr)
library(knitr)
library(kableExtra)

# Build some data
x <- rep(c(1,0),times=50)
y <- c(rep(1,times=25),rep(0,times=75))
z <- c(rep(1,times=75),rep(0,times=25))

# Function to run frequencies on several variables at a time
MassFreq <- function(...){
  step1 <- list(...) # Wrap items into a list
  step2 <- lapply(step1,freq,total=TRUE) # run frequencies on all items
  step3 <- bind_rows(step2) # collapse list results into single df
  Response <- unlist(lapply(step2,row.names),recursive=FALSE) # Get row names from frequencies
  step4 <- cbind(Response,step3) #Stick row names at front of the dataframe
}

# Run function - returns a data frame object
test <- MassFreq(x,y,z)

# Build table
test %>%
  kable(format="latex", booktabs = TRUE, row.names=FALSE) %>%
  group_rows("Group 1",1,3) %>%
  group_rows("Group 2",4,6) %>%
  group_rows("Group 3",7,9)
```

Gives me this upon knitting:

Frequency Table

The first "Total" text is right-aligned, but everything else is fine. Adding align=('lrrr') in the kable line does nothing, and align=('crrr') is kind of a mess. Using the index method for group_rows produces the same results. When leaving out the group_rows commands, everything in the first column is left-aligned and looks fine. My hunch is that kableExtra isn't playing well with questionr because the "Total" rows are created when running questionr::freq.

1

1 Answers

2
votes

This is a bug in current CRAN version of kableExtra, 0.5.2. It has been fixed in the dev version. I will make a CRAN release next week.