如何将嵌套的 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 中的“正确”数据框的主要内容,如果未能解决你的问题,请参考以下文章