Eric Green
Eric Green

Reputation: 7725

wrap long text in kable table column

I would like wrap long text in my kable table. Here is a simple example of a table with column text that is too long and needs to be wrapped for the table to fit on the page.

---
title: "test"
output: pdf_document
---

```{r setup, include=FALSE}
  library(knitr)
```


This is my test

```{r test, echo=FALSE}
test <- data.frame(v1=c("This is a long string. This is a long string. This is a long string. This is a long string. This is a long string.",
                        "This is a another long string. This is a another long string. This is a another long string. This is a another long string. This is a another long string."),
                   v2=c(1, 2))
kable(test)
```

enter image description here

Upvotes: 51

Views: 37943

Answers (3)

dfrankow
dfrankow

Reputation: 21367

I wanted to wrap a long text column from kable in Quarto. I found success using the tbl-colwidths option for a chunk. See here.

So for this example it would look like:

```{r}
#| tbl-colwidths: [80, 20]

test <- data.frame(v1=c("This is a long string. This is a long string. This is a long string. This is a long string. This is a long string.",
                        "This is a another long string. This is a another long string. This is a another long string. This is a another long string. This is a another long string."),
                   v2=c(1, 2))
kable(test)
```

The [80, 20] means "spend 80% of the total column width on column 1, and 20% on column 2."

Upvotes: 0

Hao
Hao

Reputation: 7826

An alternative solution other than the awesome pander package is to use column_spec in kableExtra. In this case, the following code will do the trick.

kable(test, "latex") %>%
  column_spec(1, width = "10em")

Upvotes: 68

daroczig
daroczig

Reputation: 28622

I've created the pander package to produce markdown tables in a flexible way. By default, it will split cells with long string to 30 chars, but there are a bunch of global options and fn arguments to override that, enable hyphenation and other tweaks. Quick demo:

> pander::pander(test)

-----------------------------------
              v1                v2 
------------------------------ ----
This is a long string. This is  1  
a long string. This is a long      
string. This is a long string.     
    This is a long string.         

This is a another long string.  2  
This is a another long string.     
This is a another long string.     
This is a another long string.     
This is a another long string.     
-----------------------------------

> pander::pander(test, split.cell = 80, split.table = Inf)

------------------------------------------------------------------------------------
                                      v1                                         v2 
------------------------------------------------------------------------------- ----
This is a long string. This is a long string. This is a long string. This is a   1  
                      long string. This is a long string.                           

This is a another long string. This is a another long string. This is a another  2  
  long string. This is a another long string. This is a another long string.        
------------------------------------------------------------------------------------

Upvotes: 31

Related Questions