如何从数据框创建嵌套的对象数组
how to create a nested array of objects from a dataframe
我想使用 R
中的 jsonlite 包从 data.frame
格式获取一个嵌套的对象数组 (JSON)。我举个例子
library(jsonlite)
time <- c(1,1,2,2)
ps <- c("p1","p2","p1","p2")
v1 <- c(5,6,7,8)
v2 <- c(10,11,12,13)
df <- data.frame(ps, v1,v2)
toJSON(df)
这里 df
是 R
中的数据框,我得到了 Json 格式的对象数组:
[{"ps":"p1","v1":5,"v2":10},
{"ps":"p2","v1":6,"v2":11},
{"ps":"p1","v1":7,"v2":12},
{"ps":"p2","v1":8,"v2":13}]
但是,我想实现以下输出,其中基本上我有一个嵌套结构。在此处添加类似另一个分组参数(时间)的内容,df
的长格式看起来像
df2 <- data.frame(time,ps, v1,v2)
这是
df2
time ps v1 v2
1 1 p1 5 10
2 1 p2 6 11
3 2 p1 7 12
4 2 p2 8 13
我想要实现的最终输出(Json)格式是
[{
"time": "1"
"all_ps":[
{
"ps":"p1",
"v1":5,
"v2":10
},
{
"ps":"p2",
"v1":6,
"v2":11
}]
},
{
"time": "2"
"all_ps":[
{
"ps":"p1",
"v1":5,
"v2":10
},
{
"ps":"p2",
"v1":6,
"v2":11
}]
}
]
其中 all_ps
就像一个额外的结构或分组。这个 all_ps
已给出,但我不知道如何将它添加到数据框中以获得所需的输出。如何使用 jsonlite 在 R
中实现此目的?
这个有效:
library(magrittr)
library(jsonlite)
lapply(as.list(1:2), function(x) list(time = as.character(x),
"all_ps" = df[time == x, ])) %>%
toJSON(auto_unbox = TRUE)
另一种在不知道 time
列中的内容的情况下拆分数据框的方法:
library(jsonlite)
ansLs <- lapply(split(df2, df2$time),
function(x) list(time=as.character(x$time[1]), all_ps=x[-1]))
toJSON(unname(ansLs), auto_unbox = TRUE)
我想使用 R
中的 jsonlite 包从 data.frame
格式获取一个嵌套的对象数组 (JSON)。我举个例子
library(jsonlite)
time <- c(1,1,2,2)
ps <- c("p1","p2","p1","p2")
v1 <- c(5,6,7,8)
v2 <- c(10,11,12,13)
df <- data.frame(ps, v1,v2)
toJSON(df)
这里 df
是 R
中的数据框,我得到了 Json 格式的对象数组:
[{"ps":"p1","v1":5,"v2":10},
{"ps":"p2","v1":6,"v2":11},
{"ps":"p1","v1":7,"v2":12},
{"ps":"p2","v1":8,"v2":13}]
但是,我想实现以下输出,其中基本上我有一个嵌套结构。在此处添加类似另一个分组参数(时间)的内容,df
的长格式看起来像
df2 <- data.frame(time,ps, v1,v2)
这是
df2
time ps v1 v2
1 1 p1 5 10
2 1 p2 6 11
3 2 p1 7 12
4 2 p2 8 13
我想要实现的最终输出(Json)格式是
[{
"time": "1"
"all_ps":[
{
"ps":"p1",
"v1":5,
"v2":10
},
{
"ps":"p2",
"v1":6,
"v2":11
}]
},
{
"time": "2"
"all_ps":[
{
"ps":"p1",
"v1":5,
"v2":10
},
{
"ps":"p2",
"v1":6,
"v2":11
}]
}
]
其中 all_ps
就像一个额外的结构或分组。这个 all_ps
已给出,但我不知道如何将它添加到数据框中以获得所需的输出。如何使用 jsonlite 在 R
中实现此目的?
这个有效:
library(magrittr)
library(jsonlite)
lapply(as.list(1:2), function(x) list(time = as.character(x),
"all_ps" = df[time == x, ])) %>%
toJSON(auto_unbox = TRUE)
另一种在不知道 time
列中的内容的情况下拆分数据框的方法:
library(jsonlite)
ansLs <- lapply(split(df2, df2$time),
function(x) list(time=as.character(x$time[1]), all_ps=x[-1]))
toJSON(unname(ansLs), auto_unbox = TRUE)