[英]R: Converting a nested list with empty elements to data.frame (from json)
我已經導入了像這樣的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 。
經過一些研究后,我找到了幾個關於將list
轉換為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
形成單個列的data.frame
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.