json文件中的单个变量嵌套列表,转换为数据框行

时间:2019-02-14 03:07:26

标签: r json dataframe

我浏览了堆栈溢出和网络,尝试了许多针对其他问题的建议解决方案,并进入了这一阶段,如下所示。

我很抱歉对R和编码很陌生。

情况: 我已经从Java来源获取了一些数据作为.json文件。我希望将其转换为数据框,以便我可以更轻松地使用它来分析随时间变化的值。

问题: 该信息以多层嵌套列表形式显示在json文件中。

它以以下形式出现:

{"daily":{"1534550400000":14005196,"1550016000000":5924765},"average":{"1534550400000":13750989,"1550016000000":7966277}}

每日价值与平均值相同。 “ x”是日期代码,以1970年1月1日为单位,以毫秒为单位,“:”后面的值是一个整数。

当我使用fromJSON将其拉入R时,它以嵌套列表的形式出现:

Library(jsonlite)  
x<-fromJSON("short.json")
str(x)
List of 2
$ daily  :List of 2
..$ 1534550400000: int 14005196
..$ 1550016000000: int 5924765
$ average:List of 2
..$ 1534550400000: int 13750989
..$ 1550016000000: int 7966277

我将每日列表和平均列表分开,因为它们将位于不同的数据框中。

daily<-x[[1]]
average<-x[[2]]
> str(daily)
List of 2
 $ 1534550400000: int 14005196
 $ 1550016000000: int 5924765
> str(average)
List of 2
 $ 1534550400000: int 13750989
 $ 1550016000000: int 7966277

如果我继续Daily1 <-daily [[1]],那么我将丢失我需要的时间数据。

我的思维过程是我应该展平时间列表和整数,并创建一个数据框,将展平的信息分成两列。

我的主要问题是我不确定如何拼合嵌套在另一个列表中的列表。

在阅读其他人的清单问题时,许多人一直在使用sapply或lapply,这对他们来说似乎很成功,但是我已经走到了尽头。

谢谢。

我已经阅读了cran提供的jsonlite,sapply,lapply和flatten文档。

编辑: 我一直在研究这个问题,并找到了一种可能的替代方法,我在其中使用:

此表显示了每日和平均值的所有值,而没有时间码。

as.data.frame(unlist(flatten(daily)))
1                  14005196
2                   5924765
3                  13750989
4                   7966277

看起来更接近我想要的位置,我将需要将第二个值移到新列中。

EDIT2:理想的结果是每天有一张桌子:

      Time         Var
1 1534550400000 14005196
2 1550016000000 5924765

1 个答案:

答案 0 :(得分:0)

我不确定是否有问题。据我了解,您想要:

> as.data.frame(lapply(x, unlist))
                 daily  average
1534550400000 14005196 13750989
1550016000000  5924765  7966277