Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON到R数据帧:保留重复值_Json_R - Fatal编程技术网

JSON到R数据帧:保留重复值

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失败

我有一个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失败 我发现解析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