使用R将json转换为数据帧

时间:2017-07-10 08:41:25

标签: json r dataframe jsonlite

我喜欢下面的json,我从下面的网址获得:

{
   "info" : {
      "1484121600" : [
         212953175.053333,212953175.053333,null
      ],
      "1484125200" : [
         236203014.133333,236203014.133333,236203014.133333
      ],
      "1484128800" : [
         211414832.968889,null,211414832.968889
      ],
      "1484132400" : [
         208604573.791111,208604573.791111,208604573.791111
      ],
      "1484136000" : [
         231358374.288889,231358374.288889,231358374.288889
      ],
      "1484139600" : [
         210529301.097778,210529301.097778,210529301.097778
      ],
      "1484143200" : [
         212009682.04,null,212009682.04
      ],
      "1484146800" : [
         232364759.566667,232364759.566667,232364759.566667
      ],
      "1484150400" : [
         218138788.524444,218138788.524444,218138788.524444
      ],
      "1484154000" : [
         218883301.282222,218883301.282222,null
      ],
      "1484157600" : [
         237874583.771111,237874583.771111,237874583.771111
      ],
      "1484161200" : [
         216227081.924444,null,216227081.924444
      ],
      "1484164800" : [
         227102054.082222,227102054.082222,null
      ]
},
"summary" : "data",
"end" : 1484164800,
"start": 1484121600
}

我正在使用j中的jsonlite包从某个url获取这个json,如下所示:

library(jsonlite)

input_data <- fromJSON(url)

timeseries <- input_data[['info']]       # till here code is fine

abc <- data.frame(ds = names(timeseries[[1]]), 
                  y = unlist(timeseries[[1]]), stringsAsFactors = FALSE)

(上面一行有问题)

我需要将timeseries变量中的数据转换为数据帧;将索引列作为纪元时间而不是。数据框中的列将取决于否。数组中的值和所有数组将具有相同的否。值得肯定的。但不是。数组中的值可以是1 0r 2等;它不是固定的。如下例所示,数组大小为3。

例如:dataframe应如下所示:

index        y1                     y2                    y3
1484121600   212953175.053333       212953175.053333      null
1484125200   236203014.133333       236203014.133333   236203014.133333

请建议我如何在R中这样做。我是新手。

JSON,数组中只有1个项目:

{
"info": {
"1484121600": [
212953175.053333
],
"1484125200": [
236203014.133333
],
"1484128800": [
211414832.968889
],
"1484132400": [
208604573.791111
],
"1484136000": [
231358374.288889
],
"1484139600": [
210529301.097778
],
"1484143200": [
212009682.04
],
"1484146800": [
232364759.566667
],
"1484150400": [
218138788.524444
],
"1484154000": [
218883301.282222
],
"1484157600": [
237874583.771111
],
"1484161200": [
216227081.924444
],
"1484164800": [
227102054.082222
]
},
"summary": "data",
"end": 1484164800,
"start": 1484121600
}

1 个答案:

答案 0 :(得分:2)

考虑使用sapply()将json值列表绑定到矩阵,然后将列转置为t()的行,最后使用data.frame()转换为数据帧

abc <- data.frame(t(sapply(timeseries, c)))
colnames(abc) <- gsub("X", "y", colnames(abc))

abc
#                   y1        y2        y3
# 1484121600 212953175 212953175        NA
# 1484125200 236203014 236203014 236203014
# 1484128800 211414833        NA 211414833
# 1484132400 208604574 208604574 208604574
# 1484136000 231358374 231358374 231358374
# 1484139600 210529301 210529301 210529301
# 1484143200 212009682        NA 212009682
# 1484146800 232364760 232364760 232364760
# 1484150400 218138789 218138789 218138789
# 1484154000 218883301 218883301        NA
# 1484157600 237874584 237874584 237874584
# 1484161200 216227082        NA 216227082
# 1484164800 227102054 227102054        NA