如何将嵌套的 txt/json 转换为 R 中的“正确”数据框

Posted

技术标签:

【中文标题】如何将嵌套的 txt/json 转换为 R 中的“正确”数据框【英文标题】:How to transform a nested txt/json into a "proper" data frame in R 【发布时间】:2021-12-22 07:00:27 【问题描述】:

我下载了一个包含超过 200 万行的数据集,看起来像这样(我有 10 个列/变量,从“messageid”开始。我不知道“id”列或变量是什么??应该是但是我不需要这些来分析):


    "_id": 
        "$id": "fh37fc3huc3"
    ,
    "messageid": "4757724838492485088139042828",
    "attachments": [],
    "usernameid": "47284592942",
    "username": "Alex",
    "server": "475774810304151552",
    "text": "Must watch",
    "type": "462050823720009729",
    "datetime": "2018-08-05T21:20:20.486000+00:00",
    "type": 
        "$numberLong": "0"
    



    "_id": 
        "$id": "23453532dwq"
    ,
    "messageid": "232534",
    "attachments": [],
    "usernameid": "273342",
    "usernameid": "Alice",
    "server": "475774810304151552",
    "text": "https://www.youtube.com/",
    "type": "4620508237200097wd29",
    "datetime": "2018-08-05T21:20:11.803000+00:00",
    "type": 
        "$numberLong": "0"
    

在意识到这是一个“嵌套数据集”之前,我尝试了显而易见的方法:

test <- read.csv(test.csv, row.names=NULL)

这是错误信息:

read.table 中的错误(file = file,header = header,sep = sep,quote = quote,: 列多于列名

如果我不使用“row.names=NULL”

test <- read.csv(test.csv)

这是错误信息:

read.table 中的错误(file = file,header = header,sep = sep,quote = quote,: 不允许重复的“row.names”

有谁知道我如何将这个嵌套数据集读入 R 中,其中每个变量都是一列,每个观察值都是一行?

【问题讨论】:

【参考方案1】:

此文件的类型为 json 而不是 csv。您需要添加 [] 以表明它是一个 json 列表。然后你可以把树框成一个表格:

文件data.json的内容:

[
  "_id": 
    "$id": "fh37fc3huc3"
  ,
  "messageid": "4757724838492485088139042828",
  "attachments": [],
  "usernameid": "47284592942",
  "username": "Alex",
  "server": "475774810304151552",
  "text": "Must watch",
  "type": "462050823720009729",
  "datetime": "2018-08-05T21:20:20.486000+00:00",
  "type": 
    "$numberLong": "0"
  
,


  "_id": 
    "$id": "23453532dwq"
  ,
  "messageid": "232534",
  "attachments": [],
  "usernameid": "273342",
  "usernameid": "Alice",
  "server": "475774810304151552",
  "text": "https://www.youtube.com/",
  "type": "4620508237200097wd29",
  "datetime": "2018-08-05T21:20:11.803000+00:00",
  "type": 
    "$numberLong": "0"
  

]

代码:

library(jsonlite)
library(tidyverse)

fromJSON("data.json") %>% as_tibble()
#> # A tibble: 2 x 9
#>   `_id`$`$id` messageid   attachments usernameid  username server  text   type  
#>   <chr>       <chr>       <list>      <chr>       <chr>    <chr>   <chr>  <chr> 
#> 1 fh37fc3huc3 4757724838… <list [0]>  47284592942 Alex     475774… Must … 46205…
#> 2 23453532dwq 232534      <list [0]>  273342      <NA>     475774… https… 46205…
#> # … with 1 more variable: datetime <chr>

由reprex package 创建于 2021-11-09 (v2.0.1)

【讨论】:

以上是关于如何将嵌套的 txt/json 转换为 R 中的“正确”数据框的主要内容,如果未能解决你的问题,请参考以下文章

r 将嵌套列表转换为R中的数据帧

在R中将嵌套的for循环转换为并行

如何将嵌套数组对转换为数组中的对象

将带有坐标的json文件嵌套到R中的数据框中

如何将嵌套列表中的值转换为集合?

如何将不带引号的嵌套字符串字典转换为Python中的字典