如何将多边形XY坐标字符串拆分为X、Y坐标两个子集?
拆分多边形坐标字符串为X/Y坐标列的解决方案
核心思路
先清理坐标字符串的格式,将其转换为数值列表,再按索引规则分别提取X、Y坐标。以下是基于dplyr、stringr和purrr的实现方案:
代码实现
1. 构造示例数据
library(dplyr) library(stringr) library(purrr) # 模拟原始数据结构 df <- tibble( polygonID = c(1, 2, 3), Points = c("[10,20,30,40,50,60]", "[15,25,35,45]", "[5,10,15,20,25,30,35,40]") )
2. 处理坐标拆分
df_processed <- df %>% # 清理方括号,拆分字符串并转为数值列表 mutate(coord_list = str_remove_all(Points, "\\[|\\]") %>% str_split(",") %>% map(as.numeric)) %>% # 提取X(奇数位索引)和Y(偶数位索引)坐标 mutate( X_coords = map(coord_list, ~ .x[seq(1, length(.x), by = 2)]), Y_coords = map(coord_list, ~ .x[seq(2, length(.x), by = 2)]) ) %>% # 移除中间辅助列 select(-coord_list)
3. 可选:展开为逐点数据
如果需要将每个多边形的坐标拆分为单独行(每个点一行),可以用tidyr::unnest:
library(tidyr) df_expanded <- df_processed %>% unnest(c(X_coords, Y_coords))
代码说明
str_remove_all(Points, "\\[|\\]"):清除坐标字符串首尾的方括号str_split(","):按逗号分割字符串为字符向量map(as.numeric):将每个字符向量转换为数值型列表seq(1, length(.x), by = 2):生成奇数位索引提取所有X坐标;偶数位索引同理提取Y坐标
内容的提问来源于stack exchange,提问作者morrrach
相关产品推荐
相关产品推荐

