2017-08-03 53 views
0

我認爲這個問題很簡單,但它讓我。說我有一個JSON文件如:JSON不規則數據到R數據框

{ 「鍵1」: 「值1」],
「KEY2」: 「值2」, 「值3」, 「值4」],
「KEY3 「:」 值5" , 「value6」]}

我想將它們導入到數據幀,如:

0 key value 
1 key1 value1 
2 key2 value2 
3 key2 value3 
4 key2 value4 
5 key3 value5 
6 key3 value6 

使用不同的參數嘗試jsonlite和rjson fromJSON功能,它返回一個數列表而不是數據框

試過了其他問題的幾個答案,但仍然無法弄清楚。幫助是appreicated!

試圖選擇不公開功能,並得到一個醜陋的方法(靈感來自R unlist changes names):

json <- '{"key1":["value1"], 
    "key2":["value2", "value3", "value4"], 
    "key3":["value5", "value6"]}' 

jsonR <- fromJSON(txt = json) 

data.frame(key = rep(names(jsonR), lengths(jsonR)), value = unlist(jsonR , use.names=F)) 
+0

您發佈的JSON無效JSON。 –

+0

@RobbyCornelissen你會解釋無效部分嗎? – Hanfu

+0

字符串需要在JSON中引用。對象鍵是字符串。 –

回答

0

我想你可以(從utilsbase包分別)使用stackrev功能來實現這一目標:

> json <- '{"key1":["value1"], 
+ "key2":["value2", "value3", "value4"], 
+ "key3":["value5", "value6"]}' 
> 
> df <- rev(stack(fromJSON(txt=json))) 
> colnames(df) <- c('key', 'value') 
> df 
    key value 
1 key1 value1 
2 key2 value2 
3 key2 value3 
4 key2 value4 
5 key3 value5 
6 key3 value6 
+0

漂亮!謝謝mgc – Hanfu

+0

不客氣!如果此答案解決了您的問題,請將其標記爲已接受! – mgc