Json R列表(结构(列表())到数据帧

Json R列表(结构(列表())到数据帧,json,r,dataframe,type-conversion,Json,R,Dataframe,Type Conversion,我有一个JSON数据源,提供哈希列表: [ { "a": "foo", "b": "sdfshk" }, { "a": "foo", "b": "ihlkyhul" } ] 我在包中使用fromJSON()将其转换为R数据结构。它返回: list( structure(list(a = "foo", b = "sdfshk"), .Names = c("a", "b")), structure(list(a = "foo", b = "ihlkyhul"

我有一个JSON数据源,提供哈希列表:

[
  { "a": "foo",
    "b": "sdfshk"
  },
  { "a": "foo",
    "b": "ihlkyhul"
  }
]
我在包中使用
fromJSON()
将其转换为R数据结构。它返回:

list(
  structure(list(a = "foo", b = "sdfshk"), .Names = c("a", "b")),
  structure(list(a = "foo", b = "ihlkyhul"), .Names = c("a", "b"))
)
我需要将其放入一个R数据框中,但是
data.frame()
将其转换为一个包含四列的单行数据框,而不是预期的2x2数据框。我没有R-fu来完成从一个到另一个的转换,尽管看起来应该很简单

奖励积分:

实际的问题有点复杂,因为JSON数据源不像我上面展示的那样规则。它返回的对象类型不同。也就是说,每个字段中设置的字段可以是几种不同类型中的一种:

[
  { "a": "foo",
    "b": "asdfhalsdhfla"
  },
  { "a": "bar",
    "c": "akjdhflakjhsdlfkah",
    "d": "jfhglskhfglskd",
  },
  { "a": "foo",
    "b": "dfhlkhldsfg"
  }
]
如您所见,每个对象中的“a”字段都是一个类型标记,指示该对象将具有哪些其他字段

我不太清楚解决方案是如何处理这一问题的

如果这两种对象类型只是组合在一起,那就不可怕了,因此可以得到a、b、c和d列,而行只是具有
N/a
NULL
值,而JSON源对象没有给定字段的值。我相信我可以用
子集(df,a==“foo”)
清理结果数据帧。这样我会得到一些空列,但这对我的程序来说并不重要


如果解决方案提供了一种方法来选择哪些JSON源行进入数据帧,哪些被拒绝,那么结果就只有实际需要的列和行。

如果您有一个参差不齐的列表想要转换为data.frame,您可以使用Hadley的plyr的
rbind.fill
。有几次救了我的命。如果这是你要找的,请告诉我。请注意,我修改了第一个示例,在第三个元素中只包含“b”,使其锯齿状

> x <- list(
+         structure(list(a = "foo", b = "sdfshk"), .Names = c("a", "b")),
+         structure(list(a = "foo", b = "ihlkyhul"), .Names = c("a", "b")),
+         structure(list(b = "asdf"), .Names = "b")
+ )
> 
> library(plyr)
> do.call("rbind.fill", lapply(x, as.data.frame))
     a        b
1  foo   sdfshk
2  foo ihlkyhul
3 <NA>     asdf
>x
>图书馆(plyr)
>do.call(“rbind.fill”,lappy(x,as.data.frame))
a b
1富深发展有限公司
2福伊尔基胡尔
3 asdf
是的,这个plus
subset()
正是我所期望的
data.frame()
自动完成的。非常感谢。