可能是一个非常基本的问题,但我在简单特性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
将是不切实际的,因为它“动态”不工作,而且我不想永久地删除几何学列,而且SF2[,1:5,drop=T]
也不实用,因为我必须查看对象以查看几何图形列的位置。
使用:sf_0.5-4
- R 3.4.1
发布于 2017-09-06 15:02:32
我们可以使用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
现在是一个dataframe,所以我认为您可以为您的示例执行以下操作。
merge(SF1, `st_geometry<-`(SF2, NULL))
更新
正如吉利斯所指出的,另一个功能,st_set_geometry
,也可以完成同样的任务。这可能是一个更好的选择,因为使用st_set_geometry
不需要使用"“和"<-”来封装st_geometry
函数。
https://stackoverflow.com/questions/46084534
复制