无法取消嵌套 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 %&gt;% map_if(is.data.frame, list) 然后我得到type &amp; coordinates 列。我正在尝试理解您在下面的答案并运行它,并将很快接受它。 我确实在数据子集上测试了该函数,但使用完整数据需要时间 这是因为当您执行map(coordinates, as_tibble)) 时,有一个默认命名。我应该有美元map(coordinates, ~ tibble(lat = .x[,1], lon = .x[,2])) 是的,这更好,再次感谢!! 【参考方案1】:

下面,代码使用 OP 的解决方案,直到转换为 tibble,然后我们单独对列进行 unnesting,因为结构有点复杂,即涉及 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

从字典列表中创建嵌套的 json 对象

解析 JSON 以在 JQuery 中创建二维数组

如何从 JSON 数组在 DB 中创建表以在 Spring Boot 中创建 REST API

如何从我的 webpack 2 配置中创建/生成/导出文件以在我的 React 代码中使用?

将带有坐标的json文件嵌套到R中的数据框中