2017-07-26 163 views
0

我需要從列表形式的Json文件(下面的文本示例示例)中傳輸元數據的幫助。將JSon元數據轉換爲R data.frame

具體我有對準每一個文件的問題,因爲它似乎跳過空值,並定義特定的列等

每個數據集有大約80個某處參數(的md5sum,DATA_TYPE。等等。 )其中約20左右有空值,但我仍然希望他們列出,因爲1000 +數據集的空值不總是重合,所以當我試圖將所有的數據轉換爲data.frame,我認爲他們是跳線鋸,並沒有很好地對齊。希望這可以讓我對自己需要的東西更清晰一點。

樣品:

[{ 
    "md5sum": "aa", 
    "data_type": "bb", 
    "file_name": "cc", 
    "file_size": 100296, 
    "data_format": "BCR XML", 
    "submitter_id": null, 
    "access": "open", 
    "state": "live", 
    "file_id": "ee", 
    "data_category": "ff", 
    "associated_entities": [ 
    { 
     "entity_id": "gg", 
     "case_id": "hh", 
     "entity_submitter_id": "II", 
     "entity_type": "case" 
    } 
    ], 

一些代碼的嘗試,我嘗試使用,但並沒有真正的工作:

library(rjson) 

jSnData2 <- fromJSON(file = "meta.json") 

df <- lapply(jSonData2, function(play){ data.frame(matrix(unlist(play), ncol=66, byrow=T))}) 

df2 <- do.call(rbind, df) 
+0

對不起,第一次使用這個,生病試圖讓它更易讀易懂 –

回答

0

使用雙括號來選擇單個元素,然後將它們組合成數據幀。

我沒有RStudio此計算機上運行這個測試就那麼可能有錯別字,但你應該能夠使用類似以下內容:

jSnData2 <- fromJSON(file='meta.json') 
md5sum <- sapply(jSnData2, function(x) x[[1]]) 
data_type <- sapply(jSnData2, function(x) x[[2]]) 
#repeat for the rest of the elements in the json file 

df <- data.frame(md5sum, data_type, #add all the other lists here) 

你的結果將是一個數據幀列名使用任何你稱爲你的名單。

+0

好吧,所以基本上我只粘貼了我的第一個數據集的一個子部分,其中我有超過1000個,每個包含大約80個「列表」正如你所說,md5sum等等。這似乎是一個非常漫長的做法嗎?無論如何,我會盡力而爲。謝謝 –

+0

您可以編寫一個循環,並使用一組名稱來設置列名稱,但可能有一種方法可以提取這些名稱,但我不知道它是否正確。 – jamzsabb