You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决含嵌套列表的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:44:55