我浏览了堆栈溢出和网络,尝试了许多针对其他问题的建议解决方案,并进入了这一阶段,如下所示。
我很抱歉对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
答案 0 :(得分:0)
我不确定是否有问题。据我了解,您想要:
> as.data.frame(lapply(x, unlist))
daily average
1534550400000 14005196 13750989
1550016000000 5924765 7966277