我正在尝试使用R / tidyverse和其中一个JSON包将长表(例如下面的示例)转换为嵌套列表到JSON中。我怀疑这可以通过某种方式使用split / purrr完成,但我无法弄清楚究竟是如何。
采用以下示例输入:
library(tidyverse)
library(stringi)
df = data.frame(patient = c(rep("A",4), rep("B",4)),
sample = rep(c("P","R"),4),
file = stri_rand_strings(8, 6, '[A-Z]'))
例如,这样的
patient sample file
1 A P ZZEVYQ
2 A R KIUXRU
3 A P XRYBUE
4 A R ZCHBKN
5 B P WZYAPM
6 B R EKDFYT
7 B P CYEJCK
8 B R XFAYXX
我想输出与此类似的内容(注意:手动输入)。
[
{
"patient" : "A",
"samples" : [
{
"sample" : "P",
"files" : [
{
"file" : "ZZEVYQ"
},
{
"file" : "XRYBUE"
}
]
},
{
"sample" : "R",
"files" : [
{
"file" : "KIUXRU"
},
{
"file" : "ZCHBKN"
}
]
}
]
},
{
"patient" : "B",
"samples" : [
{
"sample" : "P",
"files" : [
{
"file" : "WZYAPM"
},
{
"file" : "CYEJCK"
}
]
},
{
"sample" : "R",
"files" : [
{
"file" : "EKDFYT"
},
{
"file" : "XFAYXX"
}
]
}
]
}
]
有关如何执行此操作的任何建议吗?
非常感谢!
答案 0 :(得分:0)
对于大多数json输出,如果需要嵌套级别,则需要嵌套数据。这是实现获取JSON所需的连接的一种方法
dfout <- df %>% group_by(patient, sample) %>%
summarize(files=list(map(file, ~list(file=.x)))) %>%
summarize(samples=list(map2(sample, files, ~list(samples=.x, files=.y))))
jsonlite::toJSON(dfout, auto_unbox = TRUE)