使用 R 使用 jsonlite 将数据帧转换为 JSON 对象
Transform dataframe into JSON object with jsonlite using R
我正在尝试将 data.frame 转换为 JSON 对象,我包括数据结构 table,使用 toJSON 的 R 代码jsonlite包的()函数,得到的结果和预期的结果。我在函数里做了各种join,都找不到解决方法
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]
}
}
]
但我需要这样的格式,即每条记录必须有两个键,名称和数据:
[
{
"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
我正在尝试将 data.frame 转换为 JSON 对象,我包括数据结构 table,使用 toJSON 的 R 代码jsonlite包的()函数,得到的结果和预期的结果。我在函数里做了各种join,都找不到解决方法
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]
}
}
]
但我需要这样的格式,即每条记录必须有两个键,名称和数据:
[
{
"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