解决含嵌套列表的JSON导入R后NA问题并生成目标数据框
问题描述
我需要将一份JSON文件导入R并转换为数据框,但导入后出现大量NA值。以下是数据片段:
{"data":[{"British Columbia":"BC","BC":"4.63"}, {"Alberta":"AB","AB":"4.15"}, {"Ontario":"ON","ON":"13.6"}]}
我尝试了以下代码:
library(jsonlite) jsonData <- fromJSON("filepath") jsonData
得到如下输出:
$data British Columbia BC Alberta AB Ontario ON Manitoba MB Saskatchewan SK 1 BC 4.63 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> 2 <NA> <NA> AB 4.15 <NA> <NA> <NA> <NA> <NA> <NA> 3 <NA> <NA> <NA> <NA> ON 13.6 <NA> <NA> <NA> <NA> 4 <NA> <NA> <NA> <NA> <NA> <NA> MB 1.28 <NA> <NA> 5 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> SK 1.1
我推测问题源于JSON文件开头的"data"字段,请问如何解决该问题以得到如下目标输出?
British Columbia BC BC 4.63 Alberta AB AB 4.15 Ontario ON ON 13.6 Manitoba MB MB 1.28 Saskatchewan SK SK 1.1
解决方案
问题本质是JSON中每个子对象都是独立的键值对组,fromJSON默认按列对齐所有键,导致非对应位置出现NA。只需将每个子对象的键值对拆解为两行数据,再合并即可。
执行以下代码:
library(jsonlite) # 读取JSON文件 jsonData <- fromJSON("filepath") # 遍历data列表,将每个子对象转为两列数据框后合并 final_df <- do.call(rbind, lapply(jsonData$data, function(item) { data.frame( "British Columbia" = names(item), "BC" = unname(item), stringsAsFactors = FALSE ) })) # 输出结果 print(final_df)
这段代码会把每个子对象的键作为第一列,值作为第二列,再将所有行合并,最终得到你需要的无NA的目标格式。
内容的提问来源于stack exchange,提问作者Foster Lockerbie
相关产品推荐
相关产品推荐

