【发布时间】:2018-06-23 09:01:33
【问题描述】:
我在一个嵌套列表中有一组数据,这样顶部列表的每个成员都有描述符(但不一定是相同的描述符),然后是一个子列表,这些孩子可以有孩子,依此类推.孩子的深度是任意的。一个小例子:
family <- list(
list(name = "Alice", age = 40, eyes = "blue", children = list(
list(name = "Bob", age = 20, eyes = "blue"),
list(name = "Charlie", age = 18, eyes = "brown")
)),
list(name = "Dan", age = 12, eyes = "green"),
list(name = "Erin", age = 69, eyes = "green", children = list(
list(name = "Frank", age = 45, eyes = "blue", children = list(
list(name = "George", age = 24, eyes = "blue", children = list(
list(name = "Harry", age = 2, eyes = "green")
)),
list(name = "Ingrid", age = 22, eyes = "brown", hair = "brown"),
list(name = "Jack", age = 29, eyes = "brown")
)),
list(name = "Karen", age = 43),
list(name = "Larry", age = 21, eyes = "blue")
))
)
> str(family, max.level = 2)
List of 3
$ :List of 4
..$ name : chr "Alice"
..$ age : num 40
..$ eyes : chr "blue"
..$ children:List of 2
$ :List of 3
..$ name: chr "Dan"
..$ age : num 12
..$ eyes: chr "green"
$ :List of 4
..$ name : chr "Erin"
..$ age : num 69
..$ eyes : chr "green"
..$ children:List of 3
理想情况下,我想创建一个数据框,使每一行都是一个家庭成员,每一列都是列表中的一个属性:
name age eyes
1 Alice 40 blue
2 Bob 20 blue
3 Charlie 18 brown
(etc)
但目前还不清楚如何递归到任意深度。我已经设法使用map(family, ~ .$name) 获得顶级成员,但我不明白如何更深入。一些成员没有孩子这一事实使情况变得复杂。
我已经查看了 purrr 文档,但我找不到任何看起来有帮助的东西。也许我没有使用正确的术语。
不胜感激。谢谢!
【问题讨论】: