我正在尝试将数据提取中的列转换为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)
但是我无法将其分散到多列中。
有人可以帮忙吗?
谢谢!
自我解决,而不是靠运气:
lapply(extract$stage, jsonlite::fromJSON) -> ex1
do.call(bind_rows, lapply(ex1, unlist)) -> ex2
ex2
...虽然很高兴看到某人是否有更整洁的解决方案!