我如何使用模式将包含 x 和 y 坐标的值字符串拆分为两个子集?

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

我试图找出分割一串值的最佳方法。每个字符串都是一系列 xy 像素坐标,最终形成一个多边形。但我似乎找不到一种解决方案,可以将字符串分成两个子集。一个子集包含所有 x 坐标,另一个子集包含每个多边形的所有 y 坐标。

这是当前格式:

多边形ID 积分
1 [x1,y1,x2,y2,x3,y3...]
2 [x1,y1,x2,y2,x3,y3...]

值示例: [[1057.97, 338.98, 1069.53, 322.73,.........]] [[ x1 , y1 , x2 , y2 ,...........]]

因此您可以看到前两个值创建了一个 xy 对,因此我需要拉第一个 x,然后拉动所有其他值来子集所有 x 坐标值..并对所有 y 坐标执行相同操作以创建两列积分。

(注:每个多边形的坐标点长度各不相同)

最终我想要的是两个列表,如下所示:

多边形ID X_坐标 Y_坐标
1 [x1,x2,x3,...] [y1,y2,y3,...]
2 [x1,x2,x3,...] [y1,y2,y3,...]

我已经查看了 stringr 和 dplyr 的选项,但我还没有找到一个好的解决方案(我还没有解决任何代码,因为我试图首先获得任何见解)。感谢任何和所有的帮助。谢谢:)

string split stringr
1个回答
0
投票

好吧,我绝不是专家,我可能会让事情变得复杂,但至少我认为我有一个可行的答案。如果我理解正确,数据框的“Points”列(我将其称为“df”)是一个字符列。然后:

df %>%
mutate(Points = strsplit(gsub("\\[|\\]","",Points), ","),
      xcoord = paste0("[", sapply(map(Points, ~.x[c(TRUE, FALSE)]), paste, collapse = ","),"]" ),
      ycoord = paste0("[", sapply(map(Points, ~.x[c(FALSE, TRUE)]), paste, collapse = ","),"]" )) %>%
select(-Points)

我首先使用 gsub() 删除“Points”列中的括号,然后使用 strsplit() 拆分字符串。如果您想保留“点数”列,只需重命名该结果即可。 然后按顺序:

  1. 我通过映射和回收逻辑向量 c(TRUE, FALSE) 来选择 Points 中的所有其他元素(受到这篇文章的启发:从向量中选择所有其他元素
  2. 我使用 sapply 将第 1 点的列表粘贴在一起,并使用“,”作为分隔符。
  3. 我不确定你是否需要括号,但我使用paste0在第2点的结果之前和之后粘贴括号。
  4. 我使用 select() 删除 Points 列(如果不再需要)

希望它对你有用!

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