【发布时间】:2021-01-24 18:23:52
【问题描述】:
我从 API 中提取数据并将其从 JSON 转换,最终得到一个数据框(“参与者”),其中包含游戏中的锦标赛信息,其中包含识别参与者的标识符号(“id”)锦标赛,然后是一个深度嵌套的列表,其中包含有关参与者所玩游戏的信息。在该嵌套列表中是一个数据框,其中包含我有兴趣提取的列。这是我的数据框中相关列的图像。
例如,这些是列表中的前两项。
[[1]]
[[1]]$description
[1] ""
[[1]]$faction
[1] "galacticempire"
[[1]]$name
[1] "Unnamed Squadron"
[[1]]$pilots
id name points ship upgrades.force-power upgrades.sensor upgrades.modification upgrades.talent upgrades.gunner
1 darthvader darthvader 84 tieadvancedx1 hate firecontrolsystem afterburners NULL NULL
2 soontirfel soontirfel 54 tieinterceptor NULL NULL NULL predator NULL
3 puresabacc puresabacc 62 tieskstriker NULL NULL NULL outmaneuver fifthbrother
[[1]]$points
[1] 200
[[1]]$vendor
[[1]]$vendor$yasb
[[1]]$vendor$yasb$builder
[1] "Yet Another Squad Builder 2.0"
[[1]]$vendor$yasb$builder_url
[1] "https://raithos.github.io/"
[[1]]$vendor$yasb$link
[1] "https://raithos.github.io/?f=Galactic%20Empire&d=v5!s!173:204,113,-1,105:;179:127,-1,-1:;210:126,82,-1,-1:&sn=Unnamed%20Squadron&obs="
[[1]]$version
[1] "2.0.0"
[[2]]
[[2]]$name
[1] "Adam"
[[2]]$faction
[1] "scumandvillainy"
[[2]]$favourite
[1] TRUE
[[2]]$pilots
ship upgrades.talent upgrades.crew upgrades.sensor upgrades.title id points
1 fangfighter fearless NULL NULL NULL fennrau 71
2 fangfighter fearless NULL NULL NULL oldteroch 59
3 g1astarfighter trickshot 000 advancedsensors misthunter 4lom 63
[[2]]$format
[1] "Extended"
[[2]]$version
[1] "2.3.5"
[[2]]$points
[1] 193
对于此列表中的每个项目,我有兴趣从列表中的 $pilots 项目中提取“id”列和“ship”列,将初始数据框中的“id”附加到这些列中,并且将其绑定到一个新的数据框中。然后我会对这个数据框做一些额外的操作。
我已经弄清楚如何从我的列表中提取其他项目。例如,我知道下面的代码为列表列表中的每个项目提取“点”项目。
lapply(participants$lists, "[[", 'points')
我也知道下面的代码会从列表第一项的“pilots”数据框中提取“id”列。
lists[[1]][['pilots']]['id']
但是,我不确定如何将该子集实现为整个列表的函数,并且我不确定如何将“参与者”数据框中的标识符附加到这些项目。
从列表中的每个项目中提取整个“飞行员”数据框并将其绑定在一起是行不通的,因为数据框的列数不同。我也尝试过扁平化列表,但这似乎并没有让我到达我想去的地方,但也许我做错了。
do.call("rbind", lapply(participants$lists, "[[", 'pilots'))
感谢您提供的任何帮助。
【问题讨论】:
标签: r dataframe lapply nested-lists