如何将JSON接口返回的多Data Frame列表合并为单一结构化Data Frame?
解决方案
你可以通过将每个子DataFrame转为宽格式后按行合并来实现需求,这里提供两种常用方案:
方案一:使用tidyverse工具(推荐)
先加载dplyr和tidyr包,然后对列表中的每个子DataFrame做宽格式转换,最后合并所有结果:
library(dplyr) library(tidyr) # 遍历列表,将每个子DataFrame转为宽表(Name作为列名,Value作为对应值) wide_specs <- lapply(S, function(sub_df) { pivot_wider(sub_df, names_from = Name, values_from = Value) }) # 合并所有宽表为单个DataFrame final_df <- bind_rows(wide_specs)
方案二:Base R 实现
如果不想加载额外包,可以用Base R的方法完成:
# 遍历列表,转置Value列并设置列名为Name wide_specs <- lapply(S, function(sub_df) { # 转置Value得到行数据,转为DataFrame row_data <- as.data.frame(t(sub_df$Value), stringsAsFactors = FALSE) # 设置列名 colnames(row_data) <- sub_df$Name row_data }) # 合并所有行数据 final_df <- do.call(rbind, wide_specs)
补充说明
- 因为所有子DataFrame的
Name列内容完全一致,所以转宽后的列名是统一的,直接合并不会出现列不匹配的问题。 - 如果合并后的列类型不符合预期,可以用
readr::type_convert(final_df)自动识别并转换列类型。
内容的提问来源于stack exchange,提问作者DJD
相关产品推荐
相关产品推荐

