从 `sp@data` 中的 `sf` 对象中提取没有几何形状的数据
Extract data without geometries from `sf` objects like in `sp@data`
可能是一个非常基本的问题,但我在 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
是不切实际的,因为它不起作用 "on the fly" 并且我不想永久删除几何列并且 SF2[,1:5,drop=T]
也是不切实际的因为我必须查看对象以查看几何列的位置。
使用:sf_0.5-4
- R 3.4.1
我们可以使用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))
更新
正如 Gilles 所指出的,另一个函数 st_set_geometry
也可以完成同样的任务。这可能是更好的选择,因为使用 st_set_geometry
不需要使用“``”和“<-”来包含 st_geometry
函数。
可能是一个非常基本的问题,但我在 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
是不切实际的,因为它不起作用 "on the fly" 并且我不想永久删除几何列并且 SF2[,1:5,drop=T]
也是不切实际的因为我必须查看对象以查看几何列的位置。
使用:sf_0.5-4
- R 3.4.1
我们可以使用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))
更新
正如 Gilles 所指出的,另一个函数 st_set_geometry
也可以完成同样的任务。这可能是更好的选择,因为使用 st_set_geometry
不需要使用“``”和“<-”来包含 st_geometry
函数。