【发布时间】:2017-07-05 13:16:03
【问题描述】:
假设我有一个包含以下内容的 JSON 文件:
[
{
"x": 3,
"y": [3,4,5]
},
{
"x": 6,
"y": [6,7,8]
}
]
如果这是使用jsonlite R 包中的fromJSON 函数加载的,如下所示:
# Read the JSON data
library(jsonlite)
data <- fromJSON('[{"x":3,"y":[3,4,5]},{"x":6,"y":[6,7,8]}]')
那么x 和y 字段可以这样访问:
> data$x
[1] 3 6
> data$y
[[1]]
[1] 3 4 5
[[2]]
[1] 6 7 8
假设我不是已经有了数据框,而是尝试如下构建它:
> x2 <- data$x
> y2 <- data$y
> df <- data.frame(x = x2, y = y2)
Error in data.frame(x = x2, y = y2) :
arguments imply differing number of rows: 2, 3
我们可以看到数据帧不能以这种方式重建。如何构建包含列表的数据框?
抱歉,为了清楚起见:
> data <- fromJSON('[{"x":3,"y":[3,4,5]},{"x":6,"y":[6,7,8]}]')
> class(data)
[1] "data.frame"
我可以解析JSON来构建数据框,但是我上面使用的方法无法构建数据框。我对 R 很陌生,所以我可能在做一些愚蠢的事情。
【问题讨论】:
-
对于 R 中的数据框,行数必须相等,因为它的工作原理类似于矩阵。请问为什么需要数据框而不是列表?编辑:也检查一下stackoverflow.com/questions/7196450/…。
-
您的预期输出是什么?正如错误消息中明确指出的那样,
x和y的行数不同。 -
对于每个 x,我认为 OP 想要一个 y 列表。
-
这是个好问题。在我粘贴的小例子中,我可以使用一个列表,但它是一个更大的项目的一部分,结果需要是一个数据框。我只是很困惑为什么我可以得到一个具有所示结构的数据框(使用 jsonlite 包),但我无法重新创建数据框。
-
谢谢,Ronak,好问题。如果我从数据框(我使用 JSON 解析获得)开始,为什么我不能使用原始数据框的元素重建数据框?