如何将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
相关产品推荐
相关产品推荐

