R 将字符串转换为sf中的几何图形

R 将字符串转换为sf中的几何图形,r,sf,R,Sf,基本问题,如何将typecharacterLINESTRING变量转换为geometrytype insf,然后分别将两个坐标分离为不同的变量。例如 library(tidyverse) library(sf) df <- structure(list(geometry = c("LINESTRING (-85.76 38.34, -85.72 38.38)", "LINESTRING (-85.46 38.76, -85.42 3

基本问题,如何将type
character
LINESTRING
变量转换为
geometry
type in
sf
,然后分别将两个坐标分离为不同的变量。例如

library(tidyverse)
library(sf)
df <- structure(list(geometry = c("LINESTRING (-85.76 38.34, -85.72 38.38)", 
                            "LINESTRING (-85.46 38.76, -85.42 38.76)", 
                            "LINESTRING (-85.89 38.31, -85.85 38.32)"
), var1 = c(4, 5, 6
), var2 = c(1, 2, 3
)), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame"
))
df
# # A tibble: 3 x 3
#   geometry                                 var1  var2
#   <chr>                                   <dbl> <dbl>
# 1 LINESTRING (-85.76 38.34, -85.72 38.38)     4     1
# 2 LINESTRING (-85.46 38.76, -85.42 38.76)     5     2
# 3 LINESTRING (-85.89 38.31, -85.85 38.32)     6     3
我以为像
final%st\u geometry(geometry)
这样的组合可以转换它,但我想不出来。也许
sfheaders
在这里有用吗

编辑

我想要一个
sf
类型的解决方案,而不是手动提取坐标

有什么建议吗?
谢谢

我不熟悉上面提到的软件包,但是使用regex我们可以做类似的事情

gsub("[^0-9\\.\\s-]", "", df$geometry, perl= TRUE)
对于所需的输出,我们可以使用

df <- cbind.data.frame(df, do.call("rbind.data.frame", lapply(strsplit(gsub("[^0-9\\.\\s-]", "", df$geometry, perl= TRUE), " "), function(i) as.numeric(i[2:length(i)]))))
df <- df[ , c(1, 4:7, 2, 3)]
names(df) <- c("geometry", "start_lon", "start_lat", "end_lon", "end_lat", "var1", "var2")
df
library(sf)
可以直接读取已知文本,如果您告诉它使用
wkt=
参数。这将为您提供
sf
对象

sf <- sf::st_as_sf( df, wkt = "geometry" )
sf
# Simple feature collection with 3 features and 2 fields
# geometry type:  LINESTRING
# dimension:      XY
# bbox:           xmin: -85.89 ymin: 38.31 xmax: -85.42 ymax: 38.76
# CRS:            NA
#                         geometry var1 var2
# 1 LINESTRING (-85.76 38.34, -...    4    1
# 2 LINESTRING (-85.46 38.76, -...    5    2
# 3 LINESTRING (-85.89 38.31, -...    6    3

谢谢,但我正在寻找一个
sf
类型的解决方案。你的方法没有回答我的主要问题,我如何将字符变量
geometry
转换为类型
geometry
sf
@user绘图我不确定你的问题是关于什么的,我想。一般来说,您可以使用上面我正在寻找的
class(df$geometry)解决方案更改类,谢谢您的帮助
sf <- sf::st_as_sf( df, wkt = "geometry" )
sf
# Simple feature collection with 3 features and 2 fields
# geometry type:  LINESTRING
# dimension:      XY
# bbox:           xmin: -85.89 ymin: 38.31 xmax: -85.42 ymax: 38.76
# CRS:            NA
#                         geometry var1 var2
# 1 LINESTRING (-85.76 38.34, -...    4    1
# 2 LINESTRING (-85.46 38.76, -...    5    2
# 3 LINESTRING (-85.89 38.31, -...    6    3