解析极度嵌套的地理数据

问题描述 投票:0回答:1

我已经抓取了一个 geoJSON 文件并设法找到了我需要获取的数据:

library(rvest)
raw_site <- "https://raw.githubusercontent.com/fogocruz/mapafc/main/index.html"
rvest_html <- read_html(raw_site, options = "HUGE")
script <- rvest_html %>% html_element("body") %>% html_element("script") 
json <- script %>% html_text() %>% jsonlite::parse_json()

Crime2013 <- json$x$calls[[10]][["args"]]



Crime2013[[1]][[1]][[1]][[1]] 
$lng
$lng[[1]]
[1] -43.26532

$lng[[2]]
[1] -43.26521

$lng[[3]]
[1] -43.26504

$lng[[4]]
[1] -43.26464

$lng[[5]]
[1] -43.26455

$lng[[6]]
[1] -43.26392

$lng[[7]]
[1] -43.26392

$lng[[8]]
[1] -43.26397

$lng[[9]]
[1] -43.26398

$lng[[10]]
[1] -43.26432

$lng[[11]]
[1] -43.26433

$lng[[12]]
[1] -43.26511

$lng[[13]]
[1] -43.26532

$lng[[14]]
[1] -43.26569

$lng[[15]]
[1] -43.26657

$lng[[16]]
[1] -43.26671

$lng[[17]]
[1] -43.26695

$lng[[18]]
[1] -43.26834

$lng[[19]]
[1] -43.26805

$lng[[20]]
[1] -43.26718

$lng[[21]]
[1] -43.26652

$lng[[22]]
[1] -43.26746

$lng[[23]]
[1] -43.26709

$lng[[24]]
[1] -43.266

$lng[[25]]
[1] -43.26566

$lng[[26]]
[1] -43.26552

$lng[[27]]
[1] -43.26532


$lat
$lat[[1]]
[1] -22.89113

$lat[[2]]
[1] -22.89114

$lat[[3]]
[1] -22.89105

$lat[[4]]
[1] -22.8908

$lat[[5]]
[1] -22.89079

$lat[[6]]
[1] -22.89117

$lat[[7]]
[1] -22.89117

$lat[[8]]
[1] -22.89124

$lat[[9]]
[1] -22.89123

$lat[[10]]
[1] -22.89185

$lat[[11]]
[1] -22.89187

$lat[[12]]
[1] -22.89143

$lat[[13]]
[1] -22.89164

$lat[[14]]
[1] -22.89202

$lat[[15]]
[1] -22.89264

$lat[[16]]
[1] -22.89266

$lat[[17]]
[1] -22.89263

$lat[[18]]
[1] -22.8917

$lat[[19]]
[1] -22.89119

$lat[[20]]
[1] -22.89175

$lat[[21]]
[1] -22.89091

$lat[[22]]
[1] -22.89043

$lat[[23]]
[1] -22.88976

$lat[[24]]
[1] -22.8903

$lat[[25]]
[1] -22.89072

$lat[[26]]
[1] -22.89098

$lat[[27]]
[1] -22.89113`

这是一个奇异的多边形形状;我有 3618 个这样的信息,然后有 3618 行信息,这样我还需要解析然后一对一匹配,然后在交互式地图上绘制

供参考,可以通过线定位需要匹配的数据

json$x$calls[[3]][["args"]][[5]][[1]] %>% read_html() %>% html_text()

返回

[1] "id    24 Triênio 2006-2008 Grupo Milícia Território CONJUNTO DO IAPC Tipo Conjunto habitacional Bairro CACHAMBI Município Rio de Janeiro "

这里,第一个参数是它是什么类别的信息(id)、(Trienio)、(Grupo),接下来是它需要显示的信息(24)、(2006-2008)、(Milicia)。 ..

我怎样才能解析它然后匹配它?

我尝试使用 unnest() 但我不知道如何先执行 tibble() - 或者这是否是正确的方向。

r parsing
1个回答
0
投票

这可能会让你开始。

首先我循环浏览列表

Crime2013
(我只能到 2022 年),然后提取经度、纬度和位置名称。然后我
rbind
列表有一个包含lng、lat和位置名称的data.frame。

geolist  <- lapply(1:2022 ,function(x) {bind_cols(
lng = unlist(Crime2013[[1]][[x]][[1]][[1]]$lng),

lat = unlist(Crime2013[[1]][[x]][[1]][[1]]$lat),

location = json$x$calls[[3]][["args"]][[5]][[x]] %>% read_html() %>% html_text()) })

geodf <- do.call(rbind, geolist)
© www.soinside.com 2019 - 2024. All rights reserved.