问题描述
我正在尝试将一个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,}
]
}
]
解决方法
你可以这样做:
df<- data.frame(name = d$Municipio)
df$data<- split(d,d$Municipio)
jsonlite::toJSON(df)
,
我们可以使用group_split
library(dplyr)
library(jsonlite)
df %>%
group_split(Municipio) %>%
toJSON