【发布时间】:2020-01-17 10:53:44
【问题描述】:
我有一个列表列表,由于某些 JSON 文件的结构,其中又包含多个列表。每个列表都有相同的数量(即 48 个列表,包含 1 个列表、1 个列表、1 个列表、2 个列表 [我需要最后两个列表中的第一个])。现在,问题是,我需要从所有这些列表中检索深度嵌套的数据。
举一个可重现的例子。
列表结构大致如下(可能多一层):
list1 = list(speech1 = 1, speech2 = 2)
list2 = list(list1, randomvariable="rando")
list3 = list(list2) #container
list4 = list(list3, name="name", stage="stage")
list5 = list(list4) #container
list6 = list(list5, date="date")
listmain1 = list(list6)
listmain2 = list(list6)
listmain3 = list(listmain1, listmain2)
结构应该是这样的:
[[1]]
[[1]][[1]]
[[1]][[1]][[1]]
[[1]][[1]][[1]][[1]]
[[1]][[1]][[1]][[1]][[1]]
[[1]][[1]][[1]][[1]][[1]][[1]]
[[1]][[1]][[1]][[1]][[1]][[1]][[1]]
[[1]][[1]][[1]][[1]][[1]][[1]][[1]]$speech1
[1] 1
[[1]][[1]][[1]][[1]][[1]][[1]][[1]]$speech2
[1] 2
[[1]][[1]][[1]][[1]][[1]][[1]]$randomvariable
[1] "rando"
[[1]][[1]][[1]][[1]]$name
[1] "name"
[[1]][[1]][[1]][[1]]$stage
[1] "stage"
[[1]][[1]]$date
[1] "date"
[[2]]
[[2]][[1]]
[[2]][[1]][[1]]
[[2]][[1]][[1]][[1]]
[[2]][[1]][[1]][[1]][[1]]
[[2]][[1]][[1]][[1]][[1]][[1]]
[[2]][[1]][[1]][[1]][[1]][[1]][[1]]
[[2]][[1]][[1]][[1]][[1]][[1]][[1]]$speech1
[1] 1
[[2]][[1]][[1]][[1]][[1]][[1]][[1]]$speech2
[1] 2
[[2]][[1]][[1]][[1]][[1]][[1]]$randomvariable
[1] "rando"
[[2]][[1]][[1]][[1]]$name
[1] "name"
[[2]][[1]][[1]][[1]]$stage
[1] "stage"
[[2]][[1]]$date
[1] "date"
最终结果如下所示:
date name speech1 speech2
1
2
我想从我需要的变量中创建列,并从我从中提取它们的列表中创建行。在上面的示例中,我需要从所有主列表中检索变量 Speech1、speech2、名称和日期,并转换为更简单的数据帧。我不太确定最快的方法,并且在过去的几天里一直在用 lapply() 和 purrr 敲我的头。理想情况下,我想将列表视为列中具有扁平变量的 rowID——但这也很棘手。任何帮助表示赞赏。
【问题讨论】:
-
最终结果会是一个有 3 行的数据框,每行包含您所说的变量的值,其中每个行名称包含该行所属列表的编号?
-
最终结果将是一个有 48 行的数据框(即原始列表和 3 列我需要的变量
-
嗯,我怕是没看懂。您可以根据问题的玩具示例编辑问题并粘贴预期结果的示例吗?
-
道歉试试这个^^
-
数据框中的第一行属于
listmain1,第二行属于listmain2,对吧?也就是说,它将包含这些列表的日期、名称等值。
标签: r list nested-lists