seleccionar insertar extraer ejemplos datos data crear columnas columna agrupar r list dataframe plyr

insertar - Convierta la lista R a un marco de datos con elementos faltantes/NULL



list to data frame r (2)

En un comentario se menciona que solo se desea un solo bucle, que se puede lograr con la respuesta de @ flodel simplemente al juntar el cuerpo de los dos bucles:

rbind.fill(lapply(alist, function(f) { as.data.frame(Filter(Negate(is.null), f)) }))

dando

name age 1 Foo 22 2 Bar NA 3 Baz NA

Dada una lista:

alist = list( list(name="Foo",age=22), list(name="Bar"), list(name="Baz",age=NULL) )

¿Cuál es la mejor manera de convertir esto en un marco de datos con columnas de nombre y edad, con valores faltantes (aceptaré NA o "" en ese orden de preferencia)?

Los métodos simples que usan ldply fallan porque intenta convertir cada elemento de lista en un marco de datos, pero el que tiene los barfs NULOS porque las longitudes no coinciden. Lo mejor que tengo en este momento es:

> ldply(alist,function(s){t(data.frame(unlist(s)))}) name age 1 Foo 22 2 Bar <NA> 3 Baz <NA>

pero eso es bastante icky y la variable numérica se convierte en un factor ...


Paso 1: eliminar elementos NULL

non.null.list <- lapply(alist, Filter, f = Negate(is.null))

Paso 2: apilar todo junto:

library(plyr) rbind.fill(lapply(non.null.list, as.data.frame)) # name age # 1 Foo 22 # 2 Bar NA # 3 Baz NA

Edición : En caso de que tuviera una variable que sea NULL para todos los elementos de su lista, no se mostraría en su salida final. Si, por el contrario, desea una columna con NA , el primer paso no debe eliminar NULL s, sino reemplazarlos con NA s:

Paso 1 alternativa: reemplazar NULL con NA :

non.null.list <- lapply(alist, lapply, function(x)ifelse(is.null(x), NA, x))