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

如何用R将JSON转换为长格式DataFrame(支持百万级数据)

用R高效将大体积JSON转换为长格式DataFrame

针对你提供的每行单键数组结构的JSON数据,且数据量超百万条的场景,推荐使用**jsonlite(流式解析)+ data.table(高效数据操作)**的组合,兼顾内存友好性和处理速度。

核心思路

  1. 用jsonlite::stream_in()流式读取JSON:避免一次性加载全量数据到内存,适合大规模数据集。
  2. 用data.table的分组+拆分数组操作:比传统方法更快、内存占用更低,高效转换为长格式。

代码实现

场景1:JSON数据存储在文件中(推荐,适合百万级数据)

# 加载依赖包
library(jsonlite)
library(data.table)

# 流式读取JSON文件,转为data.table(关闭verbose避免冗余输出)
dt <- stream_in(file("your_data.json"), verbose = FALSE) |> as.data.table()

# 转换为长格式并拆分数组列
final_df <- dt[, .(Value = unlist(.SD)), by = names(dt)]
# 重命名列名以匹配需求
setnames(final_df, c("Name", "Value"))

场景2:JSON数据在内存变量中

library(jsonlite)
library(data.table)

# 示例JSON文本
json_text <- '{"A": [123, 234, 345]}
{"B": [1213, 132, 342, 1235]}
{"C": [132, 12]}'

# 用textConnection模拟流式读取
dt <- stream_in(textConnection(json_text), verbose = FALSE) |> as.data.table()

# 转换为目标格式
final_df <- dt[, .(Value = unlist(.SD)), by = names(dt)]
setnames(final_df, c("Name", "Value"))

结果验证

运行后final_df即为你需要的长格式DataFrame:

NameValue
A123
A234
A345
B1213
B132
B342
B1235
C132
C12

为什么这个方案适合大规模数据

  • 流式解析:stream_in()逐行处理JSON,不会将整个文件加载到内存,避免内存溢出。
  • data.table优化:分组操作和数组拆分均为底层优化实现,处理速度远快于base R或tidyverse的等价操作,内存占用更低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 02:02:21