如何按组分离数据框,然后在 R 中为每个组编写单独的 KML 文件?

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

我有一个包含纬度和经度以及属性的数据框。我想通过对其中一列进行分组来拆分此数据框,并将这些组写入 R 中的单独 KML 文件中。例如,我想要基于颜色的单独 KML 文件(一个用于蓝色,一个用于绿色,一个用于红色)。作为参考,我的实际数据集我有 50 多种颜色。

    Name Latitude   Longitude Color
   Dawn 48.93553 -111.677777  Blue
   Lore 45.13333 -114.888888 Green
   Nice 40.73499 -114.999900  Blue
    Cat 41.89999 -114.999200   Red
   Lake 48.99678 -116.787876   Red
 Forest 42.88889 -112.999900   Red
r spatial kml
1个回答
0
投票

您可以先将您的data.frame转换为

sf
对象,它可以
split()
为命名列表作为常规data.frame,然后通过
sf::st_write()
将每个部分保存为KML。
purrr::iwalk()
可以方便地访问列表名称,因此拆分因子也以文件名结尾。

library(sf)
#> Linking to GEOS 3.9.3, GDAL 3.5.2, PROJ 8.2.1; sf_use_s2() is TRUE

df_ <- read.table(header = T, text ="
   Name Latitude   Longitude Color
   Dawn 48.93553 -111.677777  Blue
   Lore 45.13333 -114.888888 Green
   Nice 40.73499 -114.999900  Blue
    Cat 41.89999 -114.999200   Red
   Lake 48.99678 -116.787876   Red
 Forest 42.88889 -112.999900   Red")

st_as_sf(df_, coords = c("Longitude", "Latitude"), crs = "WGS84") |>
  split(~ Color) |>
  purrr::iwalk(\(features, color) st_write(features, paste0(color,".kml")))
#> Writing layer `Blue' to data source `Blue.kml' using driver `KML'
#> Writing 2 features with 2 fields and geometry type Point.
#> Writing layer `Green' to data source `Green.kml' using driver `KML'
#> Writing 1 features with 2 fields and geometry type Point.
#> Writing layer `Red' to data source `Red.kml' using driver `KML'
#> Writing 3 features with 2 fields and geometry type Point.

结果文件:

fs::dir_info(glob = "*.kml")[1:5]
#> # A tibble: 3 × 5
#>   path       type         size permissions modification_time  
#>   <fs::path> <fct> <fs::bytes> <fs::perms> <dttm>             
#> 1 Blue.kml   file          559 rw-         2023-03-23 23:09:14
#> 2 Green.kml  file          415 rw-         2023-03-23 23:09:14
#> 3 Red.kml    file          702 rw-         2023-03-23 23:09:14

创建于 2023-03-23 与 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.