从`s @`对象中的`sf`对象中提取没有几何的数据

时间:2017-09-06 21:23:04

标签: r sp sf

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

我正在寻找本地sf函数来动态提取没有几何的sf对象的所有列。就像带有SP@data个对象的sp一样。

以下功能完成了这项工作,但我更喜欢使用本机功能:

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

典型用法是当我想按属性合并两个sf数据集时(merge不能与两个sf个对象合并):merge(SF1, st_data(SF2))

在这种情况下,使用st_geometry(SF2) <- NULL是不切实际的,因为它不能正常运行&#34;在飞行中&#34;并且我不想永久删除几何列,SF2[,1:5,drop=T]也不切实际,因为我必须查看对象以查看几何列的位置。

使用:sf_0.5-4 - R 3.4.1

1 个答案:

答案 0 :(得分: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"

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

merge(SF1, `st_geometry<-`(SF2, NULL))

更新

正如吉尔斯指出的那样,另一个函数st_set_geometry也可以完成同样的任务。这可能是一个更好的选择,因为使用st_set_geometry不需要使用“`”和“&lt; - ”来包含st_geometry函数。