加载到R中的JSON文件结构解析:是否视为列表?及取值找人口最多省份
关于R中加载该JSON文件的结构与数据处理方案
加载后的结构与类型说明
加载你提供的JSON后,在R中会呈现为嵌套列表(nested list):
- 最外层是一个仅含
data键的列表,data对应的值是一个包含5个元素的子列表; - 每个子列表对应一个省份的键值对,例如第一个子列表是
list("British Columbia" = "BC", "BC" = "4.63")。
这个结构确实应当被视为列表,原因是:JSON中的对象({})在R的主流JSON解析包(如jsonlite)中默认解析为列表,且你提供的JSON中每个省份子对象的键名不统一(每个子对象的第一个键是省份全称,第二个是简称),无法直接被解析为结构规整的数据框。
访问数值并找出人口最多省份的步骤
1. 加载JSON数据
首先用jsonlite包读取JSON文件(若未安装,先运行install.packages("jsonlite")):
library(jsonlite) # 读取本地JSON文件,替换为你的文件路径 json_data <- fromJSON("your_provinces.json") # 或者直接读取JSON字符串(如果数据在R环境中) json_str <- '{ "data":[ {"British Columbia":"BC","BC":"4.63"}, {"Alberta":"AB","AB":"4.15"}, {"Ontario":"ON","ON":"13.6"}, {"Manitoba":"MB","MB":"1.28"}, {"Saskatchewan":"SK","SK":"1.1"} ] }' json_data <- fromJSON(json_str)
2. 整理数据为规整结构
由于原始列表结构不便于直接操作,我们需要将其转换为数据框:
方法1:用dplyr+purrr(推荐,代码更清晰)
先安装依赖包(若未安装):install.packages(c("dplyr", "purrr"))
library(dplyr) library(purrr) # 提取data子列表 prov_list <- json_data$data # 转换为数据框 prov_df <- map_dfr(prov_list, function(item) { tibble( province = names(item)[1], # 提取省份全称 code = names(item)[2], # 提取省份简称 population = as.numeric(item[[2]]) # 提取人口数值并转为数值型 ) })
方法2:Base R实现(无需额外依赖)
prov_list <- json_data$data # 构建数据框 prov_df <- data.frame( province = sapply(prov_list, function(x) names(x)[1]), code = sapply(prov_list, function(x) names(x)[2]), population = as.numeric(sapply(prov_list, function(x) x[[2]])), stringsAsFactors = FALSE )
3. 找出人口最多的省份
无论用哪种方法整理数据后,都可以轻松筛选出人口最多的省份:
# 用dplyr方法 max_pop_prov <- prov_df %>% slice_max(population, n = 1) # 用Base R方法 max_pop_index <- which.max(prov_df$population) max_pop_prov <- prov_df[max_pop_index, ] # 输出结果 print(max_pop_prov)
运行后会得到结果:
province code population 3 Ontario ON 13.6
内容的提问来源于stack exchange,提问作者Jessie_W
相关产品推荐
相关产品推荐

