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

如何将rjson读取的嵌套List转换为带列名的DataFrame?

将嵌套List转换为DataFrame的方法

针对你用rjson读取得到的嵌套结构List,以下是两种实用的转换方案:

方案1:使用jsonlite(推荐,自动处理嵌套)

rjson对嵌套JSON的支持较弱,更推荐用jsonlite包,它能直接将嵌套JSON读取为扁平化的DataFrame,无需手动拆解层级:

# 安装并加载jsonlite
install.packages("jsonlite")
library(jsonlite)

# 直接读取JSON为DataFrame,自动展开嵌套字段
df <- fromJSON("input.json", flatten = TRUE)

生成的DataFrame会将嵌套对象(如owner、license)的字段自动命名为owner.login、license.name格式;对于数组类型的topics,会保留为列表列,你可按需转为字符串:

# 将topics数组转为逗号分隔的字符串
df$topics <- sapply(df$topics, paste, collapse = ", ")

方案2:基于rjson + purrr手动处理嵌套

若你坚持使用rjson读取的List,可借助purrr遍历每个元素,手动提取嵌套字段并组合成DataFrame:

# 安装并加载purrr
install.packages("purrr")
library(purrr)
library(rjson)

# 读取原始List
result <- fromJSON(file = "input.json")

# 遍历每个元素,整合所有层级字段
df <- map_dfr(result, function(item) {
  # 提取顶层字段(排除嵌套对象和数组)
  top_level <- item[!names(item) %in% c("owner", "license", "topics")]
  # 提取owner字段并添加前缀
  owner_fields <- setNames(item$owner, paste0("owner_", names(item$owner)))
  # 提取license字段并添加前缀
  license_fields <- setNames(item$license, paste0("license_", names(item$license)))
  # 将topics数组转为字符串
  topics_str <- paste(item$topics, collapse = ", ")
  # 合并所有字段为一行
  c(top_level, owner_fields, license_fields, topics = topics_str)
})

内容的提问来源于stack exchange,提问作者Erik Brole

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:55:15