es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Como traductor de español que se especializa en documentos de tecnología de la información, puedo ayudarte a traducir la siguiente frase: “format a table with a nested column with kable()” a español. “formatear una tabla con una columna anidada mediante kable()” Espero que esto sea de ayuda. Si necesitas más asistencia, no dudes en preguntar.

Estoy creando un documento R Markdown que muestra el proceso de realizar algunas simulaciones. En resumen, las simulaciones serán combinaciones de dos variables, cada una con 100 intentos. A veces, quiero mostrar un dataframe en el .rmd a medida que se construye el dataframe de simulación. A veces, esto implica mostrar un dataframe con una columna anidada (anidada con tidyr) solo para mostrar “mira, hay 100 cosas aquí”.

Cuando uso head() para mostrar un dataframe con una columna anidada, la columna anidada aparece como <list> con las dimensiones (ver imagen 1). Ver imagen a continuación. Me gusta esta salida porque todo lo que quiero mostrar es “mira, hay 100 cosas colapsadas aquí”.

pic 1 - output from head()

Sin embargo, cuando uso kable(), (que preferiría por razones de formato), expande la columna de lista con comas, lo cual no me gusta. Ver aquí:

enter image description here

¿Hay alguna forma de tener el formato kable, pero aun así mostrar la columna anidada como <tibble [100 × 1]>?

Fragmento de código R para rmd aquí:

`“{r, message=FALSE}

library(tibble)
library(dplyr)
library(tidyr)
library(knitr)
library(kableExtra)

df <- tibble( var1 = c(1,2,3,1,2,3,1,2,3), var2 = c("a","a","a","b","b","b","c","c","c") ) %>%
group_by(var1, var2) %>%
slice(rep(1:n(), each = 100)) %>%
mutate(trial = c(1:n())) %>%
nest(data = trial)

head(df)

kable(head(df)) %>%
kable_minimal()
`“

`“

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes utilizar la función cell_spec() del paquete kableExtra para dar formato a las celdas de la columna anidada. Aquí tienes un fragmento de código R actualizado para tu archivo R markdown:

    “`{r, message=FALSE}
    library(tibble)
    library(dplyr)
    library(tidyr)
    library(knitr)
    library(kableExtra)

    df <- tibble( var1 = c(1,2,3,1,2,3,1,2,3), var2 = c("a","a","a","b","b","b","c","c","c") ) %>%
    group_by(var1, var2) %>%
    slice(rep(1:n(), each = 100)) %>%
    mutate(trial = c(1:n())) %>%
    nest(data = trial)

    head(df)

    kable(df, “html”) %>%
    kable_minimal() %>%
    # dar formato a las celdas de la columna “data”
    cell_spec(
    rows = 1:nrow(df),
    cols = “data”,
    # utilizar stringr::str_interp() para dar formato al texto en las celdas
    # {nrow(x)} x 1 será reemplazado por las dimensiones del data frame anidado
    # se utilizan acentos graves para mostrar < y > en la salida
    format = “html”,
    # utilizar barras invertidas para escapar los caracteres especiales en el código HTML
    value = str_interp(“\n{nrow(x)} x 1“, x = df$data)
    )
    “`

    En la función cell_spec(), especificamos las filas y columnas donde queremos dar formato a las celdas. Aquí, queremos dar formato a todas las filas de la columna “data”, así que configuramos rows = 1:nrow(df) y cols = "data".

    Luego, utilizamos el argumento value para dar formato al texto en las celdas. Utilizamos stringr::str_interp() para interpolar las dimensiones del data frame anidado ({nrow(x)} x 1) en un bloque de código HTML que se ve como <tibble>\n100 x 1</tibble>. Las barras invertidas se utilizan para escapar los caracteres especiales en el código HTML.

    Esto debería darte una tabla con un formato atractivo y las dimensiones del data frame anidado en la columna “data”.

Comments are closed.