2014-06-16 67 views
0

我從JSON創建了一個名爲'inputData'的數據框。R中的數據轉換,將列名添加到行中並從數據框中取消列表

我想要將數據轉換爲outputData樣式以使用ggplot繪製圖形。

我該如何轉換數據看起來像這樣?

inputData. 
     A  B 
1 a, 1, 2 b, 3, 4 
2 c, 5, 6 d, 7, 8 

outputData. 
    x y z w 
1 a 1 2 A 
2 c 5 6 A 
3 b 3 4 B 
4 d 7 8 B 

- 添加 -

我追加真正的代碼生成數據,爲您提供方便。

> if(!require('rjson')){ 
    install.packages('rjson') 
    library('rjson') 
    } 

> rawData<-fromJSON('[{"id":"A", "list":[{"x":"a", "y":1, "z":2}, {"x":"c", "y":5, "z":6}]}, {"id":"B", "list":[{"x":"b", "y":3, "z":4}, {"x":"d", "y":7, "z":8}]}]') 
> data1<- as.data.frame(sapply(rawData, function(x){ 
    list(
    id = x$id,   
    vlist = x$list 
    ) 
    })) 
> colnames(data1) <- sapply(data1, function(x){x$id}) 
> inputData <- as.data.frame(sapply(data1, function(x){ x$vlist })) 
+1

貴'Data1'實際上包含在它的詞 「名單」?即,這是您的數據集Data1 < - data.frame(A = c(「list(x = 1,y = 2,z = 3)」,「list(x = 7,y = 8,z = 9) 「),B = c(」list(x = 4,y = 5,z = 6)「,」list(x = 10,y = 11,z = 12)「))'? –

+0

是的,JSON解析器爲嵌套數組生成數據。 –

+0

但是數據有點不同,inputData $ A是「[1] list(x = 1,y = 2,z = 3)list(x = 7,y = 8,z = 9)」在我的情況下,inputData $ A是「[[1]] [[1]] $ x [1] 1 [[1]] $ [1] 2 [[1] [2]] $ x [1] 7 [[2] $ y [1] 8 [[2] $ z [1] 9「)。 –

回答

1

您可以使用類似:

cbind(do.call(rbind.data.frame, unlist(inputData, F)), 
     w = rep(names(inputData), each = nrow(inputData))) 
# x y z w 
#A1 a 1 2 A 
#A2 c 5 6 A 
#B1 b 3 4 B 
#B2 d 7 8 B 
+0

謝謝。我覺得用R來處理數據很困難,因爲我不擅長R語言。 –

相關問題