我想一步一步地把.geojson转换成Tibble(或数据帧).

下面是一个极简的Geojson示例,我将其存储在一个名为test.geojson的文件中(请注意,geometry字段为null,但这在这里并不重要):

{"type": "FeatureCollection",
  "features": [
    { "type": "Feature", "properties": { "VAR_1": 31,"VAR_2": "abc","VAR_3": 255 }, "geometry" : null },
    { "type": "Feature", "properties": { "VAR_1": 23,"VAR_2": "def","VAR_3": 876 }, "geometry" : null }
    ]}

期望的结果(这里假设geometry填充了两个坐标,而不是null)

# A tibble: 2 x 3
  VAR_1 VAR_2 VAR_3 geometry
  <dbl> <chr> <dbl> <list>
1    31 abc     255 <dbl [2]>
2    23 def     876 <dbl [2]>

我特别喜欢基于{tidyverse}的解决方案.我现在一直在try 迭代每个features,以try 构建数据帧,但我找不到一种方法来很好地添加geometry字段:

# Read geojson
js <- jsonlite::read_json("test.geojson") 

# Iterate through each features ... 
map_dfr(1:length(js$features), .f = function(i){
  
  df <- js$features[[i]]$properties # this works but only importing VAR_1, VAR_2, VAR_3
 
  df |> mutate(geometry = js$features[[i]]$geometry) # this does not work
  
})

注:您可以使用{geojsonsf}将其直接导入为具有sf <- geojsonsf::geojson_sf("test.geojson")sf对象,但我想一步一步地这样做,最终在Tibble上结束并了解我正在做什么.

非常感谢你的帮助!

推荐答案

假设数据是这样的:

x <- '{"type": "FeatureCollection",
  "features": [
    { "type": "Feature", "properties": { "VAR_1": 31,"VAR_2": "abc","VAR_3": 255 }, "geometry" : [-74.0060, 40.7128]},
    { "type": "Feature", "properties": { "VAR_1": 23,"VAR_2": "def","VAR_3": 876 }, "geometry" : [-74.0060, 40.7128]}
    ]}'

您可以执行以下操作:

library(tidyverse)

jsonlite::fromJSON(x)$features |>
  as_tibble() |>
  select(properties, geometry) |>
  unnest(properties)

# Output:
# A tibble: 2 × 4
  VAR_1 VAR_2 VAR_3 geometry 
  <int> <chr> <int> <list>   
1    31 abc     255 <dbl [2]>
2    23 def     876 <dbl [2]>

R相关问答推荐

从有序数据中随机抽样

更改Heatmap Annotation对象的名称

R Highcharts与两个位置关联的注释

在不丢失空值的情况下取消列出嵌套列表

使用`Watch()`和`renderUI()`时,不再满足仍出现在SHILINY AFTER条件中的条件输入

R中1到n_1,2到n_2,…,n到n_n的所有组合都是列表中的向量?

在R函数中使用加号

如何将一些单元格的内容随机 Select 到一个数据框中?

创建列并对大型数据集中的特定条件进行成对比较的更高效程序

如何在PrePlot()中将多个元素设置为斜体

计算使一组输入值最小化的a、b和c的值

使用geom_sf跨越日期线时的闭合边界

是否有一个R函数可以输出在输入的字符向量中找到的相应正则表达式模式?

如何使用grepl()在数据帧列表中 Select 特定字符串?

使用LAG和dplyr执行计算,以便按行和按组迭代

我怎么才能把一盘棋变成一盘棋呢?

修复标签重叠和ggploy内的空间

为什么在POSIXct-times的向量上循环会改变R中的类型?

基于已有ID列创建唯一ID

R:部分修改矩阵对角线的有效方法