我试图找出分割一串值的最佳方法。每个字符串都是一系列 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 的选项,但我还没有找到一个好的解决方案(我还没有解决任何代码,因为我试图首先获得任何见解)。感谢任何和所有的帮助。谢谢:)
好吧,我绝不是专家,我可能会让事情变得复杂,但至少我认为我有一个可行的答案。如果我理解正确,数据框的“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() 拆分字符串。如果您想保留“点数”列,只需重命名该结果即可。 然后按顺序:
希望它对你有用!