将嵌套深度不同的JSON文本字段转换为数据框

问题描述 投票:0回答:1

我正在尝试将数据提取中的列转换为data.frame

假设在表extract中,我有一个列extract$stage,其类型为:字符,其前11行类似于以下内容

extract <- read.table (text = 
'stage
{"Stages":{"SBS":{"Type":"N/A","Max":"N/A"}}}
{"Stages":{"SBS":{"Type":"N/A","Max":"N/A"}}}
{"Stages":{"SBS":{"Type":"N/A","Max":"N/A"}}}
{"Stages":{"SBS":[{"Type":"Land","Max":"60%"},{"Type":"Dcon","Max":"70%"},{"Type":"Finish","Max":"80%"}]}}
{"Stages":{"SBS":{"Type":"N/A","Max":"N/A"}}}
{"Stages":{"SBS":{"Type":"N/A","Max":"N/A"}}}
{"Stages":{"SBS":{"Type":"N/A","Max":"N/A"}}}
{"Stages":{"SBS":{"Type":"N/A","Max":"N/A"}}}
{"Stages":{"SBS":[{"Type":"Land","Max":"80%"},{"Type":"Dcon","Max":"80%"},{"Type":"Finish","Max":"80%"}]}}
{"Stages":{"SBS":{"Type":"N/A","Max":"N/A"}}}
{"Stages":{"SBS":{"Type":"N/A","Max":"N/A"}}}',
header = T, stringsAsFactors = F)

我最后想要的是一个数据行,它具有相同的行数,但是具有额外的列,这样结束结构可以动态捕获任何内部嵌套字段,并且我得到此布局的11行:

Record Type.NA Max.NA  Type.Land Max.Land  Type.Dcon  Max.Dcon   Type.Finish Max.Finish
1      NA       NA       NA         NA         NA     NA         NA          NA
...
4      NA       NA       Land       60%        Dcon   70%        Finish      80%

我尝试了jsonlite :: fromJSON和do.call的组合。

我可以通过以下方法从第一个列表中获取列表

lapply(extract$stage, jsonlite::fromJSON)

但是我无法将其分散到多列中。

有人可以帮忙吗?

谢谢!

r list dataframe jsonlite
1个回答
0
投票

自我解决,而不是靠运气:

lapply(extract$stage, jsonlite::fromJSON) -> ex1
do.call(bind_rows, lapply(ex1, unlist)) -> ex2
ex2

...虽然很高兴看到某人是否有更整洁的解决方案!

© www.soinside.com 2019 - 2024. All rights reserved.