簡體   English   中英

R:將帶有空元素的嵌套列表轉換為data.frame(來自json)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM