Convert R list to dataframe with missing/NULL elements

流过昼夜 提交于 2019-11-28 08:20:21
Brian Diggs

A comment mentioned wanting only a single loop, which can be achieved with @flodel's answer just by putting the body of the two loops together:

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

giving

  name age
1  Foo  22
2  Bar  NA
3  Baz  NA

Step1: remove NULL items

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

Step2: stack everything together:

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

Edit: In case you had a variable that is NULL for all your list items, it would not show up in your final output. If instead, you'd like a column filled with NA, the first step should not remove NULLs but replace them with NAs:

Step 1 alternative: replace NULL with NA:

non.null.list <- lapply(alist, lapply, function(x)ifelse(is.null(x), NA, x))
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!