如何用dplyr将含lon、lat、id的tibble转换为多边形格式tibble
用dplyr将点数据转换为多边形格式的tibble
你可以通过dplyr的分组汇总功能,把长格式的点数据转换成目标格式的tibble,具体代码如下:
library(dplyr) # 原始点数据 df <- tibble( lon = c(-119.036,-119.002,-119.010,-119.044,-119.036,-119.002,-118.968,-118.977,-119.010,-119.002), lat = c(23.097,23.105,23.136,23.128,23.097,23.105,23.112,23.143,23.136,23.105), id = c(1,1,1,1,1,2,2,2,2,2) ) # 转换为目标格式 target_df <- df %>% # 按多边形ID分组 group_by(id) %>% # 把每组的经纬度打包成坐标对列表 summarize( geometry = list(pmap(list(lon, lat), ~c(..1, ..2))), .groups = "drop" ) %>% # 将ID转为字符型,匹配目标格式 mutate(id = as.character(id)) # 查看转换后的结果 target_df
代码说明:
group_by(id):按每个多边形的ID分组,确保同一多边形的点被归为一组summarize()里的pmap():把每组的lon和lat一一对应,打包成c(经度, 纬度)的坐标对,再将所有坐标对整合为一个列表,存入geometry列.groups = "drop":完成汇总后取消分组状态,避免后续操作受分组影响mutate(id = as.character(id)):将原始的数值型ID转为字符型,和你需要的目标格式完全匹配
运行上述代码后,得到的target_df就是你想要的结构,可以直接用于后续的多边形转换操作。
内容的提问来源于stack exchange,提问作者olybear82
相关产品推荐
相关产品推荐

