当前位置: 首页 > 面试题库 >

将R中的JSON读取到data.frame

薛修能
2023-03-14
问题内容

我有JSON值列表(实际上是一个文本文件,其中每一行都是一个JSON对象)。像这样:

{ "id": 1, "name": "john", "age": 18, "education": "master" }
{ "id": 2, "name": "jack", "job": "clerk" }
...

某些值可能会丢失(例如,第一项没有“工作”值,第二项没有“教育”和“年龄”)。

我需要在R中创建数据框,并将所有缺少的列值填充为NA(如果至少一行中存在唯一名称的字段)。如何轻松实现呢?

我已经完成的工作-我安装了“ rjson”包,并将这些行解析为R列表。假设lines变量是line的字符向量。

library(rjson)
lines <- // initialize "lines" var here
jsons <- sapply(lines, fromJSON)

“ jsons”变量变成“列表列表”(每个JSON对象都用R术语转换为列表)。如何将其转换为data.frame?

我想为我提供的示例查看以下数据框:

"id" | "name" | "age" | "education" | "job"
-------------------------------------------
1    | "john" |  18   |  "master"   |   NA
2    | "jack  |  NA   |     NA      | "clerk"

问题答案:

plyr您可以用来rbind.fill为您添加NA

library(plyr)
rbind.fill(sapply(jsons, data.frame), jsons)

#   id name age education   job
# 1  1 john  18    master  <NA>
# 2  2 jack  NA      <NA> clerk

或来自 data.table

library(data.table)
rbindlist(jsons, fill=T)

dplyr

library(dplyr)
bind_rows(sapply(jsons, data.frame))


 类似资料:
  • 问题内容: 我检查了一些类似的问题,但似乎没有一个合适的答案(或对我来说足够愚蠢)。因此,我有一个非常简单的WebAPI来检查DB中是否存在带有电子邮件的用户。 AJAX: WebAPI: 现在很明显,这是行不通的。Ajax调用工作正常,但是如何将json对象解析为WebAPI以便能够像调用它一样? 编辑 我无法将电子邮件地址作为字符串传递,因为逗号弄乱了路由。 ajax调用工作正常,该对象被发送

  • 问题内容: 我想知道是否存在一种将多记录JSON文件(每行是一个JSON dict)读入熊猫数据帧的内存有效方式。下面是带有工作解决方案的2行示例,我可能需要非常多的记录。示例用途是处理Hadoop Pig JSonStorage函数的输出。 问题答案: 注意:(自0.19.0开始)现在支持行分隔的json : 或使用文件/文件路径而不是json字符串: 这将取决于您DataFrames的大小,该

  • Logcat错误 这是我使用robospice的代码 注意:这些相同的代码可以很好地运行一些json输出,一些不同类型的json,我得到了这个错误,我试图找出json结构的确切位置,但我感觉两者都是一样的,所以我很困惑,同时我喊出了这个错误的原因

  • 我是R的新手,想读一个csv文件。但是当我试图阅读它时,我遇到了错误。我的csv文件如下: 当我在RStudio中使用此命令时,我得到了错误:命令: 错误: 读取时出错。表(file=file,header=header,sep=sep,quote=quote,:不允许重复的“row.names” 我还尝试删除错误并使用此命令: 但是当我查看输出时,它不能保持方阵的结构。你能帮我做什么吗?

  • 问题内容: 只是因为一个简单,易于表达的陈述使我的脸上有些错误,所以我有点头疼。 我有一个名为strings.json的json文件,如下所示: 我现在想读取json文件。我发现了以下这些语句,但是不起作用: 控制台上显示的错误是这样的: 已编辑 从更改为 并得到了这个: 问题答案: 该方法(“ load”中没有“ s”)可以直接读取文件: 您正在使用方法,该方法仅用于 字符串 参数。 编辑:新消

  • 我有一个名为Strings.json的json文件,如下所示: 我想读取json文件,现在仅此而已。我发现了这些说法,但它不起作用: 控制台上显示的错误是: 已编辑 从更改为 得到了这个: