512 votos

R Lista de los datos del capítulo

Busqué en el foro y no pude encontrar una pregunta similar, así que pido disculpas si me he perdido.

Simplemente, tengo una lista de datos. Su longitud es de 132, y dentro de cada lista, hay una lista de longitud 20.

¿Hay una manera "rápida" para convertir esta estructura en un marco de datos que cuenta con 132 filas y 20 columnas de datos? Soy nuevo en R, así que me imagino que es probable que haya una forma fácil de hacer esto.

Muchas gracias de antemano

471voto

Marek Puntos 18000

Con rbind

 do.call(rbind.data.frame, your_list)
 

Edit: Versión retorno Anterior data.frame de list 's en lugar de vectores (comoIanSudbery señaló en los comentarios).

390voto

nico Puntos 21115

Asumiendo que su lista de listas se llama l :

 df <- data.frame(matrix(unlist(l), nrow=132, byrow=T))
 

135voto

mropa Puntos 2813

Usted puede utilizar el plyr del paquete. Por ejemplo, una lista anidada de la forma

 l <- list(a = list(var.1 = 1, var.2 = 2, var.3 = 3)
      , b = list(var.1 = 4, var.2 = 5, var.3 = 6)
      , c = list(var.1 = 7, var.2 = 8, var.3 = 9)
      , d = list(var.1 = 10, var.2 = 11, var.3 = 12)
      )
 

tiene ahora una longitud de 4 y cada lista en l contiene otra lista de la longitud 3. Ahora se puede ejecutar

   library (plyr)
  df <- ldply (l, data.frame)
 

y debe conseguir el mismo resultado que en la respuestaMarek ynico.

103voto

Alex Brown Puntos 15776

data.frame(t(sapply(mylistlist,c)))

sapply . convierte en una matriz de data.frame convierte la matriz para una trama de datos.

60voto

mnel Puntos 48160

El paquete data.table tiene la función rbindlist que es una aplicación de superfast do.call(rbind, list(...)) .

Se puede tomar una lista de lists , data.frames o data.tables como entrada.

 library(data.table)
ll <- list(a = list(var.1 = 1, var.2 = 2, var.3 = 3)
  , b = list(var.1 = 4, var.2 = 5, var.3 = 6)
  , c = list(var.1 = 7, var.2 = 8, var.3 = 9)
  , d = list(var.1 = 10, var.2 = 11, var.3 = 12)
  )

DT <- rbindlist(ll)
 

Esto devuelve un data.table hereda de data.frame .

Si usted realmente desea convertir de nuevo a un uso data.frame as.data.frame(DT)

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X