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.