Data.frame öğesini R içindeki basit özellikler nesnesinden çıkarma


43

Basit bir özellik nesnesinden geometri sütunu hariç her şeyi çıkarmanın sf-native (yani "doğru") bir yolu var mı? Bu çalışıyor

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

ancak select( , -geometry)adım gereksiz geliyor. Ayrıca, geometri niteliklerini kaldırmaz.


2
Ayrıca mümkündf <- st_drop_geometry(df)
radek

@radek Ayrıca CRAN sürümünde?
eivindhammers

Ben buna inanıyorum. Şu anda 0.7-2vinçte. Ve işte burada rdocumentation.org/packages/sf/versions/0.7-2/topics/…
radek

Yanıtlar:


36

st_geometryÖzelliği olarak ayarlayın 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"

Ayrıca (bu kaldırılmayacak olsa da attr(nc, "sf_column"):

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

Daha önce denemiştim nc$geometry <- NULL, ancak öneriniz püf noktasını yaptı. Teşekkür ederim.
eivindhammers

bunun borulu bir sürümü var mı? sf %>% mutate(geometry = NULL)çalışmıyor
obrl_soil

2
Belki de buna "geometri" değil "geom" denir? (Asla sürekli olmayacak). Başka bir yol ise,% x>% st_set_geometry (NULL) `dır. Bunlardan herhangi biri, yerelde nerede olduğumu dikkatlice kontrol etmeme rağmen, CRAN'da değil, dev'te olabilir.
mdsumner

@mdsumner harika, dolaylı bir noktaya değiniyor. Birisi aslında yöntemi yazmak zorunda, sihirle olmaz. Sf R'de yeni bir nesne sınıfı olduğu için birçok yöntem mevcut olmayabilir veya beklendiği gibi davranmayabilir.
Jeffrey Evans,

34

İşte bir sf nesnesini geometrisi olmayan basit bir veri çerçevesine dönüştürmek için pipetlenebilir bir yaklaşım. st_set_geometry()İşlevi kullanın :

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"

DÜZENLE

On 11/16/2018 , st_drop_geometry()bu açıkça yapar sf, eklendi:

nc_df2 <- nc %>% st_drop_geometry()
class(nc_df2)
#> [1] "data.frame"

-5
df <- df[,-geometry_column]

Veya yalnızca df[,-geometry_column]yeni nesne oluşturmak istemiyorsanız

Nerede:

df - nesneniz

geometry_column - geometrinin depolandığı sütun


Benim tarafımda işe yaramıyor. Test ettin mi? Yaparım sf[, -sf$geometry]ve olsunError in Ops.sfc(grid.sf$geometry) : argument "e2" is missing, with no default
eivindhammers

SF [, - geometri] 'yi deneyin sf [, - sf $ geometri]
ami

sf[, -geometry]ile başarısız olur Error in -"geometry" : invalid argument to unary operator. İle yenidendata(meuse, package = "sp"); meuse_sf <- st_as_sf(meuse); meuse_sf[, -geometry]
eivindhammers

5
Bu hiçbir şekilde çalışmaz. Belki daha önceki bir sfpakette yapmıştı, ama şimdi yapmıyor. sfVeri çerçevelerinin tüm alt kümeleri geometri sütununu korur. Lütfen sil.
Spacedman
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.