gpt4 book ai didi

json - 转置 JSON 字典列表以在 R 中进行分析

转载 作者:行者123 更新时间:2023-12-04 10:12:53 25 4
gpt4 key购买 nike

我将每个实验的实验数据表示为键值对的字典。一组相关的实验被序列化为 JSON 中这些 dicts 的列表。这可以通过 rjson 在 R 中解析包,但数据以难以分析的形式加载

data <- fromJSON('[{"k1":"v1","k2":"v2"}, {"k1":"v3","k2":"v4"}]')

产量
[[1]]
[[1]]$k1
[1] "v1"

[[1]]$k2
[1] "v2"


[[2]]
[[2]]$k1
[1] "v3"

[[2]]$k2
[1] "v4"

试图把它变成 data.frame直接与 as.data.frame(data)产量:
  k1 k2 k1.1 k2.1
1 v1 v2 v3 v4

清楚地将所有实验中的键/值对序列视为平面的一维列表。

我想要的是一个更传统的表格,每个实验都有一行,每个唯一键都有一个列:
  k1 k2
1 v1 v2
2 v3 v4

如何在 R 中干净地表达这种变换?

最佳答案

l*ply在进行列表处理时,函数可以成为您最好的 friend 。尝试这个:

> library(plyr)
> ldply(data, data.frame)
k1 k2
1 v1 v2
2 v3 v4
plyr在幕后做了一些非常好的处理来处理不规则列表之类的事情(例如,当每个列表不包含相同数量的元素时)。这在 JSON 和 XML 中很常见,并且很难处理基本函数。

或者使用基本函数:
> do.call("rbind", lapply(data, data.frame))

您可以使用 rbind.fill (来自 plyr )而不是 rbind如果您有不规则的列表,但我建议您只使用 plyr从一开始,让您的生活更轻松。

编辑:

关于你更复杂的例子,使用哈德利的建议很容易解决这个问题:
> x<-list(list(k1=2,k2=3),list(k2=100,k1=200),list(k1=5, k3=9))
> ldply(x, data.frame)
k1 k2 k3
1 2 3 NA
2 200 100 NA
3 5 NA 9

关于json - 转置 JSON 字典列表以在 R 中进行分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2260147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com