像`sp @ data`这样,从`sf`对象中提取没有几何形状的数据

Gil*_*les 3 r r-sp r-sf

可能是一个非常基本的问题,但是我在Simple Features R包的文档中没有找到任何内容。

我正在寻找一种本机sf函数,可以动态提取一个无几何形状的sf对象的所有列。就像SP@data使用sp对象。

以下函数可以完成这项工作,但我希望使用本机函数:

st_data <- function(SF) { SF[, colnames(SF) != attr(SF, "sf_column"), drop = TRUE]}
Run Code Online (Sandbox Code Playgroud)

一种典型的用法是当我想按属性合并两个SF数据集(merge不适用于两个sf对象)时:merge(SF1, st_data(SF2))

在那种情况下,使用它是不切实际的,st_geometry(SF2) <- NULL因为它不能“即时”运行,并且我也不想永久删除几何列,并且SF2[,1:5,drop=T]也不切实际,因为我必须查看对象以查看几何列在哪里。

使用:sf_0.5-4-R 3.4.1

www*_*www 5

我们可以使用该st_geometry<-函数并将几何设置为NULL

library(sf)

nc <- st_read(system.file("shape/nc.shp", package="sf"))

nc_df <- `st_geometry<-`(nc, NULL)

class(nc_df)
[1] "data.frame"
Run Code Online (Sandbox Code Playgroud)

如您所见,nc_df现在是一个数据框,因此我认为您可以为示例执行以下操作。

merge(SF1, `st_geometry<-`(SF2, NULL))
Run Code Online (Sandbox Code Playgroud)

更新资料

正如Gilles所指出的,另一个功能st_set_geometry,也可以完成相同的任务。这可能是一个更好的选择,因为使用st_set_geometry不需要使用“''”和“ <-”将st_geometry函数括起来。

  • 也可以通过`st_drop_geometry(nc)` (3认同)