JSON到R数据帧:保留重复值
我有一个JSON数据源,它是一个对象列表。某些对象属性本身就是列表。我想把整个事情变成一个数据帧,将列表作为数据帧值保存 JSON数据示例:JSON到R数据帧:保留重复值,json,r,Json,R,我有一个JSON数据源,它是一个对象列表。某些对象属性本身就是列表。我想把整个事情变成一个数据帧,将列表作为数据帧值保存 JSON数据示例: [{ "id": "A", "p1": [1, 2, 3], "p2": "foo" },{ "id": "B", "p1": [4, 5, 6], "p2": "bar" }] 所需数据帧: id p2 p1 1 A foo 1, 2, 3 2 B bar 4, 5, 6 尝试1失败
[{
"id": "A",
"p1": [1, 2, 3],
"p2": "foo"
},{
"id": "B",
"p1": [4, 5, 6],
"p2": "bar"
}]
所需数据帧:
id p2 p1
1 A foo 1, 2, 3
2 B bar 4, 5, 6
尝试1失败
我发现解析JSON的方法非常简单:
unlisted_data <- lapply(fromJSON(json_str), function(x){unlist(x)})
data.frame(do.call("rbind", unlisted_data))
我原以为使用recursive=FALSE
选项调用unlist
可以解决这个问题,但事实并非如此
尝试2失败
我注意到我几乎可以通过I
功能实现这一点:
> data.frame(I(parsed_json[[1]]))
parsed_json..1..
id A
p1 1, 2, 3
p2 foo
但行和列是相反的。转置结果会损坏重复的数据:
> t(data.frame(I(parsed_json[[1]])))
id p1 p2
parsed_json..1.. "A" Numeric,3 "foo"
jsonlite
包可以很好地处理这个问题:
library(jsonlite)
fromJSON(txt)
# id p1 p2
#1 A 1, 2, 3 foo
#2 B 4, 5, 6 bar
fromJSON(txt)$p1
#[[1]]
#[1] 1 2 3
#
#[[2]]
#[1] 4 5 6
另外,
unlist
示例中的魔法部分涉及返回类型为data.frameRowLabels
的内容。这可能与此有关吗?神圣的json库,蝙蝠侠!我用的是RJSONIO。明显不如!
library(jsonlite)
fromJSON(txt)
# id p1 p2
#1 A 1, 2, 3 foo
#2 B 4, 5, 6 bar
fromJSON(txt)$p1
#[[1]]
#[1] 1 2 3
#
#[[2]]
#[1] 4 5 6