从json文件列表到data.table:部分变量列表
我有一个超过100000个json文件的列表,我想从中获得一个只有几个变量的data.table。不幸的是,这些文件很复杂。每个json文件的内容如下所示: 样本1从json文件列表到data.table:部分变量列表,json,r,data.table,jsonlite,Json,R,Data.table,Jsonlite,我有一个超过100000个json文件的列表,我想从中获得一个只有几个变量的data.table。不幸的是,这些文件很复杂。每个json文件的内容如下所示: 样本1 $id [1] "10.1" $title $title$value [1] "Why this item" $itemsource $itemsource$id [1] "AA" $date [1] "1992-01-01" $itemType [1] "art" $creators list() 样本2 $id [1] "10
$id
[1] "10.1"
$title
$title$value
[1] "Why this item"
$itemsource
$itemsource$id
[1] "AA"
$date
[1] "1992-01-01"
$itemType
[1] "art"
$creators
list()
样本2
$id
[1] "10.2"
$title
$title$value
[1] "We need this item"
$itemsource
$itemsource$id
[1] "AY"
$date
[1] "1999-01-01"
$itemType
[1] "art"
$creators
type name firstname surname affiliationIds
1 Person Frank W. Cornell. Frank W. Cornell. a1
2 Person David A. Chen. David A. Chen. a1
$affiliations
id name
1 a1 Foreign Affairs Desk, New York Times
我需要从这组文件中得到一个包含创建者名称、项目ID和日期的表。对于上面的两个示例文件:
id date name firstname lastname creatortype
"10.1" "1992-01-01" NA NA NA NA
"10.2" "1999-01-01" Frank W. Cornell. Frank W. Cornell. Person
"10.2" "1999-01-01" David A. Chen. David A. Chen. Person
到目前为止我所做的:
library(parallel)
library(data.table)
library(jsonlite)
library(dplyr)
filelist = list.files(pattern="*.json",recursive=TRUE,include.dirs =TRUE)
parsed = mclapply(filelist, function(x) fromJSON(x),mc.cores=24)
data = rbindlist(mclapply(1:length(parsed), function(x) {
a = data.table(item = parsed[[x]]$id, date = list(list(parsed[[x]]$date)), name = list(list(parsed[[x]]$name)), creatortype = list(list(parsed[[x]]$creatortype))) #ignoring the firstname/lastname fields here for convenience
b = data.table(id = a$item, date = unlist(a$date), name=unlist(a$name), creatortype=unlist(a$creatortype))
return(b)
},mc.cores=24))
但是,在最后一步中,我得到了以下错误:
"Error in rbindlist(mclapply(1:length(parsed), function(x){:
Item 1 of list is not a data.frame, data.table or list"
提前感谢您的建议。
相关问题包括:
从错误消息中,我想这基本上意味着mclappy()的一个结果是空的,我所说的空是指NULL或data.table的0行,或者只是在并行处理中遇到错误 你能做的是: