我得到了一个列表(来自用rjson
提取的JSON),它以奇怪的方式定义了给定x
和y
值的元素的不同值(比如绘制一个图线)。我要查找的是生成一个data.frame
,其中只包含值,并在行名称和列标题中包含x
和y
的可能值。
换句话说,我试图获得这种数据框:
y1 y2
x1 v11 v12
x2 v21 v22
我输入的列表就像:
[
[
x1,
[
[y1, v11],
[y2, v12]
]
],
[
x2,
[
[y1, v21],
[y2, v22]
]
]
]
这是一份清单清单;每个内部列表包含两个元素:一个x
值和一个列表列表。那些最内部的列表有两个元素,一个y
值和一个v
值,它表示其父级的x
和y
的对象的值。用它。
我希望我的解释不会太混淆。我使用ldply
或matrix(unlist(..
进行了一些不成功的尝试。我寻找一种方法来转换我的列表,而不必在双for
循环中逐个选择每个值。
感谢阅读和您提供的任何帮助。
[编辑]
以下是我的数据dput
:
list(list(20, list(c(1, 224), c(3, 330), c(5, 436), c(10, 701
), c(20, 1231), c(30, 1231))), list(10, list(c(1, 154), c(3,
207), c(5, 366), c(10, 631), c(20, 631), c(30, 631))), list(5,
list(c(1, 119), c(3, 225), c(5, 331), c(10, 331), c(20, 331
), c(30, 331))), list(1, list(c(1, 91), c(3, 91), c(5, 91
), c(10, 91), c(20, 91), c(30, 91))))
在此示例中,20
,10
,5
,3
,1
应该是数据框架的未来x
和1
,3
,5
,10
,20
,30
未来y
。其余的是对象的值。
答案 0 :(得分:2)
当从JSON转换为R时,包jsonlite
能够简化数据结构。我不确定rjson
是否提供类似的东西。在这里,我使用它从R到JSON再往返,给我一个y_i和v_ij的矩阵:
foo <- list(list(20, list(c(1, 224), c(3, 330), c(5, 436), c(10, 701), c(20, 1231), c(30, 1231))),
list(10, list(c(1, 154), c(3, 207), c(5, 366), c(10, 631), c(20, 631), c(30, 631))),
list(5, list(c(1, 119), c(3, 225), c(5, 331), c(10, 331), c(20, 331), c(30, 331))),
list(1, list(c(1, 91), c(3, 91), c(5, 91), c(10, 91), c(20, 91), c(30, 91))))
bar <- jsonlite::fromJSON(jsonlite::toJSON(foo))
baz <- Reduce(rbind,lapply(bar, function(x) t(x[[2]])[2, ]))
colnames(baz) <- bar[[1]][[2]][,1]
rownames(baz) <- unlist(lapply(bar, function(x) x[[1]]))
baz
#> 1 3 5 10 20 30
#> 20 224 330 436 701 1231 1231
#> 10 154 207 366 631 631 631
#> 5 119 225 331 331 331 331
#> 1 91 91 91 91 91 91