19

リストが与えられた場合:

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>

しかし、それはかなり厄介で、数値変数が要因になります...

4

2 に答える 2

10

2つのループの本体を一緒に置くだけで@flodelの答えで達成できる単一のループだけが欲しいと述べたコメント:

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
于 2013-04-03T21:06:15.187 に答える