Trích xuất data.frame từ đối tượng tính năng đơn giản trong R


43

Có cách trích xuất sf -igen (tức là "chính xác") ngoại trừ cột hình học từ một đối tượng tính năng đơn giản không? Những công việc này

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

nhưng select( , -geometry)bước cảm thấy không cần thiết Ngoài ra, nó không loại bỏ các thuộc tính hình học.


2
Cũng có thể vớidf <- st_drop_geometry(df)
radek

@radek Còn trong phiên bản CRAN?
eivindhammer

Tôi vận tốc như vậy. Hiện tại 0.7-2trên cran. Và nó ở đây, ndocumentation.org/packages/sf/versions/0.7-2/topics/iêu
radek

Câu trả lời:


36

Đặt thuộc st_geometrytính thành 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"

Ngoài ra (mặc dù điều này sẽ không loại bỏ attr(nc, "sf_column"):

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

Tôi đã thử nc$geometry <- NULLtrước đây, nhưng đề nghị của bạn đã làm điều đó. Cảm ơn bạn.
eivindhammer

Có một phiên bản đường ống này? sf %>% mutate(geometry = NULL)không hoạt động
obrl_soil

2
Có lẽ nó được gọi là "geom" chứ không phải "hình học"? (Nó sẽ không bao giờ là hằng số). Một cách khác là `x%>% st_set_geometry (NULL)`. Một trong hai trong số này có thể là dev, không phải CRAN mặc dù tôi không kiểm tra cẩn thận nơi tôi đang ở địa phương.
mdsumner

@mdsumner làm cho một điểm tuyệt vời, gián tiếp ,. Ai đó phải thực sự viết phương pháp, nó không xảy ra bằng phép thuật. Vì sf là một lớp đối tượng mới trong R, nên các phương thức có thể không có sẵn hoặc không hoạt động như mong đợi.
Jeffrey Evans

34

Dưới đây là một cách tiếp cận dễ dàng để chuyển đổi một đối tượng sf thành một khung dữ liệu đơn giản không có hình học. Sử dụng st_set_geometry()chức năng:

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"

CHỈNH SỬA

Vào ngày 16/11/2018 , st_drop_geometry()đã được thêm vào sf, thực hiện điều này một cách rõ ràng:

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

-5
df <- df[,-geometry_column]

Hoặc chỉ df[,-geometry_column]khi bạn không muốn tạo đối tượng mới

Ở đâu:

df - đối tượng của bạn

hình học_column - cột nơi hình học được lưu trữ


Không làm việc của tôi. Bạn đã thử nó chưa? Tôi làm sf[, -sf$geometry]và nhậnError in Ops.sfc(grid.sf$geometry) : argument "e2" is missing, with no default
eivindhammer

Hãy thử sF [, - hình học] không phải sf [, - sf $ hình học]
ami

sf[, -geometry]thất bại với Error in -"geometry" : invalid argument to unary operator. Sinh sản vớidata(meuse, package = "sp"); meuse_sf <- st_as_sf(meuse); meuse_sf[, -geometry]
eivindhammer

5
Điều này không hoạt động trong bất kỳ cách nào. Có thể nó đã làm trong một số sfgói trước đó , nhưng bây giờ thì không. Tất cả các tập hợp con của sfkhung dữ liệu bảo tồn cột hình học. Hãy xóa.
Spainedman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.