R中的数据帧的异构列表

时间:2018-02-22 15:47:42

标签: r dataframe

我得到了一个列表(来自用rjson提取的JSON),它以奇怪的方式定义了给定xy值的元素的不同值(比如绘制一个图线)。我要查找的是生成一个data.frame,其中只包含值,并在行名称和列标题中包含xy的可能值。

换句话说,我试图获得这种数据框:

    y1  y2
x1 v11 v12
x2 v21 v22

我输入的列表就像:

[
  [
    x1,
    [
      [y1, v11],
      [y2, v12]
    ]
  ],
  [
    x2,
    [
      [y1, v21],
      [y2, v22]
    ]
  ]
]

这是一份清单清单;每个内部列表包含两个元素:一个x值和一个列表列表。那些最内部的列表有两个元素,一个y值和一个v值,它表示其父级的xy的对象的值。用它。

我希望我的解释不会太混淆。我使用ldplymatrix(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))))

在此示例中,2010531应该是数据框架的未来x135102030未来y。其余的是对象的值。

1 个答案:

答案 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