无法取消嵌套 json 文件以在 r 中创建地图?
Posted
技术标签:
【中文标题】无法取消嵌套 json 文件以在 r 中创建地图?【英文标题】:Unable to unnest json file to create map in r? 【发布时间】:2021-08-25 17:25:53 【问题描述】:我不熟悉在 r 中使用 json
并想使用其中的数据创建地图,但到目前为止我无法将其转换为可用的数据结构格式。
这是我尝试过的:
library(jsonlite)
library(tidyverse)
ind_waterways <- jsonlite::fromJSON( url("https://raw.githubusercontent.com/india-in-data/waterways/master/ind_waterways.json"))
ind_waterways
ind_waterways %>%
map_if(is.data.frame, list) %>%
as_tibble() %>%
unnest()
但是当我尝试unnest
时,我得到了错误:
ind_waterways$features %>%
map_if(is.data.frame, list) %>%
as_tibble() %>%
unnest(coordinates)
错误:无法对不存在的列进行子集化。 x 列
coordinates
不存在。运行rlang::last_error()
看看哪里出错了。
【问题讨论】:
as_tibble
后面没有coordinates
列。第二种情况是'properties'和'geometry'
@akrun 当我运行ind_waterways$features %>% map_if(is.data.frame, list)
然后我得到type & coordinates
列。我正在尝试理解您在下面的答案并运行它,并将很快接受它。
我确实在数据子集上测试了该函数,但使用完整数据需要时间
这是因为当您执行map(coordinates, as_tibble))
时,有一个默认命名。我应该有美元map(coordinates, ~ tibble(lat = .x[,1], lon = .x[,2]))
是的,这更好,再次感谢!!
【参考方案1】:
下面,代码使用 OP 的解决方案,直到转换为 tibble
,然后我们单独对列进行 unnest
ing,因为结构有点复杂,即涉及 matrix
作为嵌套 list
中的列
library(dplyr)
library(jsonlite)
library(purrr)
out <- ind_waterways %>%
map_if(is.data.frame, list) %>%
as_tibble() %>%
mutate(crs = unlist(crs)) %>%
unnest_wider(features, names_repair = "unique") %>%
unnest_wider(geometry) %>%
unnest(names(.)[3:6]) %>%
mutate(coordinates = map(coordinates, as_tibble)) %>%
unnest_wider(coordinates) %>%
unnest(c(V1, V2))
-输出
out
# A tibble: 115,318 x 7
type...1 crs type...3 id type V1 V2
<chr> <chr> <chr> <int> <chr> <dbl> <dbl>
1 FeatureCollection name Feature 0 LineString 77.6 34.6
2 FeatureCollection name Feature 0 LineString 77.5 34.6
3 FeatureCollection name Feature 0 LineString 77.4 34.7
4 FeatureCollection name Feature 0 LineString 77.2 34.7
5 FeatureCollection name Feature 0 LineString 77.2 34.8
6 FeatureCollection name Feature 0 LineString 77.1 34.8
7 FeatureCollection name Feature 0 LineString 77.1 34.8
8 FeatureCollection name Feature 0 LineString 77.0 34.8
9 FeatureCollection name Feature 0 LineString 77.0 34.8
10 FeatureCollection name Feature 0 LineString 76.8 34.9
# … with 115,308 more rows
【讨论】:
是的,我得到了与您的代码相同的输出,这看起来不错。现在我将尝试理解你的代码,因为我对 json 完全陌生。非常感谢@akrun 一直在帮助我。真的很感激:))以上是关于无法取消嵌套 json 文件以在 r 中创建地图?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 JSON 数组在 DB 中创建表以在 Spring Boot 中创建 REST API