我已经导入了一个像这样的json文件:
library(rjson)
json_str <- '[{"id": 1, "code": 7909, "text": [{"col1": "a", "col2": "some text"}], "date": "2015-12-01"}, {"id": 2, "code": 7651, "text": [], "date": "2015-12-01"}, {"id": 3, "code": 4768, "text": [{"col1": "aaa", "col2": "Blah, blah"}, {"col1": "bbb", "col2": "Blah, blah, blah"}], "date": "2015-12-01"}]'
my.list <- fromJSON(json_str)
str(my.list)
不用说,实际文件更长。
结果,我得到了一个由3个元素组成的嵌套列表,其中每个元素都是4个列表,然后,该元素$text
是一个可变长度的列表,从无到有任何数量的元素(在我的情况下,通常不超过3个)。
经过一些研究,我发现了一些关于将a转换为list
to的答案data.frame
,例如在这里和这里。但是,当'$ text'中的一个或多个嵌套列表为空时,它们都不起作用。
do.call(rbind, lapply(my.list, data.frame, stringsAsFactors=FALSE))
library(data.table)
rbindlist(my.list, fill=TRUE)
两者均返回错误。
我想将列表转换$text
为的几列data.frame
或仅转换为一列(粘贴内容)。
另一个选择是能够跳过某些元素(例如$text
)并转换列表的其余部分,然后在单独的行中将那些元素(例如$text
)转换为另一个data.frame
。我想我可以以某种方式彼此联系data.frame
。
谁能给我关于如何执行此操作的任何想法。谢谢
从声音上看,类似以下的内容应该起作用:
do.call(rbind.data.frame, lapply(my.list, function(x) {
x[["text"]] <- toString(unlist(x[["text"]]))
x
}))
## id code text date
## 2 1 7909 a, some text 2015-12-01
## 21 2 7651 2015-12-01
## 3 3 4768 aaa, Blah, blah, bbb, Blah, blah, blah 2015-12-01
这遵循您将值粘贴在一起(此处使用toString
)以在中形成单个列的想法data.frame
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句