我正在尝试将json文件加载到r中的data.frame中.我对jsonlite包中的fromJSON函数运气不错 - 但我得到了嵌套列表,并且不确定如何将输入展平为二维data.frame.Jsonlite以data.frame的形式读取文件,但在一些变量中留下嵌套列表.
有人在使用嵌套列表读入时将任何JSON文件加载到data.frame有任何提示.
#*#*#*#*#*#*#*#*#*##*#*#*#*#*#*#*#*#*# HERE IS MY EXAMPLE #*#*#*#*#*#*#*#*#*##*#*#*#*#*#*#*#*#*#
# loads the packages
library("httr")
library( "jsonlite")
# downloads an example file
providers <- fromJSON( "http://fm.formularynavigator.com/jsonFiles/publish/11/47/providers.json" , simplifyDataFrame=TRUE )
# the flatten function breaks the name variable into three vars ( first name, middle name, last name)
providers <- flatten( providers )
# but many of the columns are still lists:
sapply( providers , class)
# Some of these lists have a single level
head( providers$facility_type )
# Some have …Run Code Online (Sandbox Code Playgroud) 我有一个提供哈希列表的JSON数据源:
[
{ "a": "foo",
"b": "sdfshk"
},
{ "a": "foo",
"b": "ihlkyhul"
}
]
Run Code Online (Sandbox Code Playgroud)
我fromJSON()在rjson包中使用它将其转换为R数据结构.它返回:
list(
structure(list(a = "foo", b = "sdfshk"), .Names = c("a", "b")),
structure(list(a = "foo", b = "ihlkyhul"), .Names = c("a", "b"))
)
Run Code Online (Sandbox Code Playgroud)
我需要将其转换为R数据帧,但data.frame()将其转换为具有四列而不是预期的2x2数据帧的单行数据帧.我缺少R-fu来进行从一个到另一个的转换,尽管它看起来应该是直截了当的.
奖励积分:
实际问题有点复杂,因为JSON数据源不像我上面显示的那样规则.它返回的对象类型不同.也就是说,每个中设置的字段可以是几种不同类型之一:
[
{ "a": "foo",
"b": "asdfhalsdhfla"
},
{ "a": "bar",
"c": "akjdhflakjhsdlfkah",
"d": "jfhglskhfglskd",
},
{ "a": "foo",
"b": "dfhlkhldsfg"
}
]
Run Code Online (Sandbox Code Playgroud)
如您所见,每个对象中的"a"字段是一个类型标记,指示该对象将具有哪些其他字段.
我不太讲解解决方案是如何应对的.
如果两个对象类型只是在一起形成,那就不会太可怕了,所以你得到列a,b,c和d,并且这些行只有jSON 源对象没有给定值的值N/A或NULL值领域.我相信我可以清理生成的数据框subset(df, …