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.

Crear una lista anidada a partir de un Tibble.

Me gustaría crear una lista anidada a partir de un tibble, de modo que los datos se almacenen de manera más eficiente y sea más fácil extraer información con subconjuntos.

Tengo un tibble de 3 columnas como el siguiente:

library(dplyr)

df <- tribble(
~a,~b,~c,
"a1", "b1", 1,
"a1", "b1", 2,
"a1", "b2", 1,
"a1", "b2", 2,
)

Me gustaría convertir esto en una lista idéntica a esta:

list(a1 = list(b1 = 1:2, b2 = 1:2))

¿Alguien sabe cómo puedo hacer esto, por favor?

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, esto se puede lograr utilizando la función nest() del paquete tidyr. Aquí hay un ejemplo de código:

    library(tidyr)
    
    df_nested <- df %>% 
      nest(c)
    
    df_list <- df_nested %>% 
      mutate(a = setNames(data, a)) %>% 
      pull(a)
    
    

    Explicación:

    • nest(c) crea un dataframe anidado donde la columna c está anidada en una columna de lista llamada data.
    • mutate(a = setNames(data, a)) renombra la columna data a a y utiliza a como nombres de los elementos de la lista.
    • pull(a) extrae la columna a (que ahora es una lista) del dataframe como una lista independiente.

    El resultado df_list es idéntico a la lista deseada: list(a1 = list(b1 = 1:2, b2 = 1:2)).

Comments are closed.