有没有一种简单的(即“正确”)方法从简单要素对象中提取除几何列以外的所有内容?此方法

df <- dplyr::select(as.data.frame(sf), -geometry)


,但是select( , -geometry)步骤感觉不必要。此外,它不会删除几何属性。

评论

也可以使用df <-st_drop_geometry(df)

@radek是否也在CRAN版本中?

我是这样目前在战队上为0.7-2。它在这里rdocumentation.org/packages/sf/versions/0.7-2/topics / ...

#1 楼

st_geometry属性设置为NULL

library(sf)
nc <-  st_read(system.file("shape/nc.shp", package="sf"), quiet = TRUE)
class(nc)
## [1] "sf"         "data.frame"
st_geometry(nc) <- NULL
class(nc)
## [1] "data.frame"


(尽管这不会删除attr(nc, "sf_column"):

nc <-  st_read(system.file("shape/nc.shp", package="sf"), quiet = TRUE)
as.data.frame(nc)


评论


我之前尝试过nc $ geometry <-NULL,但是您的建议可以解决问题。谢谢。

–eivindhammers
17年1月18日在12:43

有管道版本吗? sf%>%mutate(geometry = NULL)不起作用

–obrl_soil
17-04-25在0:52



也许它叫做“几何”而不是“几何”? (永远不会保持不变)。另一种方法是`x%>%st_set_geometry(NULL)`。尽管我没有仔细检查我在本地的位置,但是这些都可能是在dev中,而不是CRAN中。

–mdsumner
17-4-25的2:03

@mdsumner提出了一个很好的,间接的观点。有人必须实际编写该方法,这不是靠魔术实现的。由于sf是R中的新对象类,因此许多方法可能不可用或无法按预期运行。

–杰弗里·埃文斯(Jeffrey Evans)
17年5月5日在15:49

是否有一种适用于POINT或MULTIPOINT SF对象的方法?当我尝试对其中任何一个执行此操作时,最终得到n×0 df。

–André.B
5月5日20:30

#2 楼

要删除几何列,请使用st_drop_geometry()

 library(sf)
nc <-  st_read(system.file("shape/nc.shp", package="sf"), quiet = TRUE)
nc_df2 <- nc %>% st_drop_geometry()
class(nc_df2)
#> [1] "data.frame"
 

在将st_drop_geometry()添加到sf包之前(11月) (2018年),则可以使用st_set_geometry()函数产生相同的结果,如下所示:

 library(sf)
nc <-  st_read(system.file("shape/nc.shp", package="sf"), quiet = TRUE)
class(nc)
#> [1] "sf"         "data.frame"

nc_df <- nc %>% st_set_geometry(NULL)
class(nc_df)
#> [1] "data.frame"
 


#3 楼

为什么不简单地选择您想要的列?
as.data.frame(sf[,"some column name"])[,1]


评论


这将单列提取为向量(sf $`some column name`是等效且更简单的),并且无法回答问题。

–eivindhammers
7月17日22:54



好了,您可以使用此方法为任意多的列建立索引,因此我不明白为什么这不能解决问题。另外,它比上面建议的方法容易。

– joaoal
7月22日19:52

1.问题是提取整个data.frame,而不是选定的列。除了非常小的数据集之外,此解决方案不是特别适合于此目的,并且当然不是“ sf-native”。 2.我想方法的简单性可能是个问题,但是st_set_geometry,st_drop_geometry和st_geometry几乎都是不言自明的,并且比您的方法短。

–eivindhammers
7月22日20:15

#4 楼

df <- df[,-geometry_column]


或者只是df[,-geometry_column]如果您不想创建新对象

其中:

geometry_column-存储几何的列

评论


在我这端不起作用。你测试过了吗?我做sf [,-sf $ geometry]并在Ops.sfc(grid.sf $ geometry)中得到错误:参数“ e2”丢失,没有默认值

–eivindhammers
17年1月18日,11:30



尝试sF [,-geometry]而不是sf [,-sf $ geometry]

–ami
17年1月18日在11:34

sf [,-geometry]失败,并出现-“ geometry”错误:一元运算符的无效参数。复制数据(meuse,package =“ sp”); meuse_sf <-st_as_sf(meuse); meuse_sf [,-geometry]

–eivindhammers
17年1月18日在11:38



这根本不起作用。也许它是在早期的sf软件包中完成的,但现在没有。 SF数据框的所有子集都保留了geometry列。请删除。

– Spacedman
18年1月5日在16:51