我正在尝试将一个data.frame转换为一个JSON对象,我包括数据表的结构,使用jsonlite包的toJSON()函数的R代码,得到的结果和预期的结果。我在函数中做了各种连接,但我找不到解决方案。
data.frame 就是这样的结构,为了不转储所有的数据,我总结了一下:
structure(list(`Código Municipio INE` = c("02003", "03014"), Municipio = c("Albacete", "Alicante/Alacant"), `Esfuerzo Social por Habitante` = c(66.255518296917,
55.4505971732305), `Relevancia Esfuerzo Social` = c(0.0779438999416286,
0.075567624299619), `Umbral Pobreza` = c(21,
28.8), `Umbral Pobreza Hombres` = c(20.5, 29), `Umbral Pobreza Mujeres` = c(21.5, 28.6)), class = "data.frame", row.names = c(NA,
-2L))
我使用 jsonlite 进行转换:
toJSON(
list(
list(
name = dfon$Municipio,
data = list(
dfon[, which(colnames(dfon) != "Municipio")],
x = dfon$`Esfuerzo Social por Habitante`,
y = dfon$`Umbral Pobreza`,
size = dfon$`Relevancia Esfuerzo Social`
)
)
), pretty=TRUE)
我得到的结果是这样的:
[
{
"name": ["Albacete", "Alicante/Alacant"],
"data": {
"1": [
{
"Código Municipio INE": "02003",
"Esfuerzo Social por Habitante": 66.2555,
"Relevancia Esfuerzo Social": 0.0779,
"Umbral Pobreza": 21,
"Umbral Pobreza Hombres": 20.5,
"Umbral Pobreza Mujeres": 21.5
},
{
"Código Municipio INE": "03014",
"Esfuerzo Social por Habitante": 55.4506,
"Relevancia Esfuerzo Social": 0.0756,
"Umbral Pobreza": 28.8,
"Umbral Pobreza Hombres": 29,
"Umbral Pobreza Mujeres": 28.6
}
],
"x": [66.2555, 55.4506],
"y": [21, 28.8],
"size": [0.0779, 0.0756]
}
}
]
但是我需要这样的格式,即每条记录必须有两个key,name和data:
[
{
"name":"Albacete",
"data":[
{
"Código Municipio INE":"02003",
"Municipio":"Albacete",
"Esfuerzo Social por Habitante":66.255518296917,
"Relevancia Esfuerzo Social":0.0779438999416286,
"Umbral Pobreza":21,
"Umbral Pobreza Hombres":20.5,
"Umbral PobrezaMujeres":21.5,
"x":66.255518296917,
"y":21,
"size":7.79438999416286,
}
]
},
{
"name":"Alicante/Alacant",
"data":[
{
"Código Municipio INE":"03014",
"Municipio":"Alicante/Alacant",
"Esfuerzo Social por Habitante":55.4505971732305,
"Relevancia Esfuerzo Social":0.075567624299619,
"Umbral Pobreza":28.8,
"Umbral Pobreza Hombres":29,
"Umbral Pobreza Mujeres":28.6,
"x":55.4505971732305,
"y":28.8,
"size":7.5567624299619,
}
]
}
]
答案 0 :(得分:2)
你可以这样做:
df<- data.frame(name = d$Municipio)
df$data<- split(d, d$Municipio)
jsonlite::toJSON(df)
答案 1 :(得分:0)
我们可以使用group_split
library(dplyr)
library(jsonlite)
df %>%
group_split(Municipio) %>%
toJSON