【问题标题】:Extracting multiple JSON files into one dataframe将多个 JSON 文件提取到一个数据帧中
【发布时间】:2019-01-03 15:25:36
【问题描述】:

我正在尝试将多个 json 文件合并到一个数据库中,尽管尝试了在 SO 上找到的所有方法,但它失败了。

这些文件提供传感器数据。我完成的阶段是:

1. Unzip the files - produces json files saved as '.txt' files
2. Remove the old zip files
3. Parse the '.txt' files to remove some bugs in the content - random 3 
letter + comma combos at the start of some lines, e.g. 'prm,{...'

我有代码可以将它们单独转换为数据帧:

stream <- stream_in(file("1.txt"))
flat <- flatten(stream)
df_it <- as.data.frame(flat)

但是当我把它放到一个函数中时:

df_loop <- function(x) {
  stream <- stream_in(x)
  flat <- flatten(stream)
  df_it <- as.data.frame(flat)
  df_it
}

然后尝试通过它:

df_all <- sapply(file.list, df_loop)

我明白了:

Error: Argument 'con' must be a connection.

然后我尝试将json文件与rbind.fill合并并合并无济于事。

不太确定我要去哪里如此严重的错误,因此非常感谢任何帮助。

【问题讨论】:

  • file.list 是文件路径列表吗?在这种情况下,您需要在您的函数中执行 stream &lt;- stream_in(file(x))
  • 这很好,但你能帮我理解为什么吗?
  • 添加并请检查

标签: r json


【解决方案1】:

您需要对您的功能进行一些小改动。改为 -

stream <- stream_in(file(x))

说明

从分析您的原始实现开始 -

stream <- stream_in(file("1.txt"))

这里的1.txt 是作为输入参数传递给file() 函数的文件路径。一个快速的?file 会告诉你这是一个

创建、打开和关闭连接的函数,即“广义 文件”,例如可能的压缩文件、URL、管道等。

现在如果你做一个?stream_in()你会发现它是一个

实现对 JSON 数据的逐行处理的函数 连接,例如套接字、url、文件或管道

这里的关键字是socket, url, file or pipe

您的file.list 只是一个文件路径列表,具体的字符/字符串。但要让stream_in() 工作,您需要传入一个file 对象,这是file() 函数的输出,该函数将文件路径作为字符串输入。

将这些链接在一起,您需要执行stream_in(file("/path/to/file.txt"))

一旦你这样做了,你的sapply 会迭代每个路径,创建文件对象并将其作为输入传递给stream_in()

希望有帮助!

【讨论】:

  • 谢谢 - 非常感谢!将重新开始尝试将它们与 rbind.fill 或类似的东西合并。
  • 我听从了你的建议,但现在合并到一个数据框似乎崩溃了。您认为我在流式处理文件中缺少什么,将它们展平并将它们附加到一个大数据框?
猜你喜欢
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 2018-11-16
  • 2020-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多