R中的数据转换,将列名附加到行中并从数据框中取消列表

时间:2014-06-16 09:01:23

标签: r

我从JSON创建了名为'inputData'的数据框。

我希望将数据转换为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 个答案:

答案 0 :(得分: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