将R列表转换为具有缺少/ NULL元素的数据帧

给出一个列表:

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

将其转换为具有名称和年龄列的数据框以及缺少值的最佳方式是什么?(按照​​优先顺序接受NA或“”)?

使用ldply的简单方法失败,因为它尝试将每个列表元素转换为数据帧,但是由于长度不匹配,因此使用NULL barfs.最好我现在是:

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

但这很漂亮,数字变量成为一个因素…

最佳答案
所提到的一个评论只想要一个单循环,这可以通过将两个循环的主体放在一起来实现:

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

  name age
1  Foo  22
2  Bar  NA
3  Baz  NA

转载注明原文:将R列表转换为具有缺少/ NULL元素的数据帧 - 代码日志