Вилучення data.frame з об'єкта простих функцій в R


43

Чи існує рідний sf (тобто "правильний") спосіб вилучення всього, крім стовпця геометрії, з простого об'єкта функцій? Це працює

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

але select( , -geometry)крок відчуває себе непотрібним. Крім того, він не видаляє атрибути геометрії.


2
Також можливо зdf <- st_drop_geometry(df)
radek

@radek Також у версії CRAN?
eivindhammers

Я так вірю. В даний час 0.7-2на кран. І ось тут rdocumentation.org/packages/sf/versions/0.7-2/topics/…
radek

Відповіді:


36

Встановіть 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

чи є трубопровідна версія цього? sf %>% mutate(geometry = NULL)не працює
obrl_soil

2
Може, це називається "геом", а не "геометрія"? (Це ніколи не буде постійним). Інший спосіб - `x%>% st_set_geometry (NULL)`. Будь-яке з них може бути у розробці, а не CRAN, хоча я не ретельно перевіряю, де я локально.
mdsumner

@mdsumner робить чудову, непряму, точку зору. Хтось має насправді написати метод, це не відбувається за допомогою магії. Оскільки sf - новий клас об'єктів у R, багато методів можуть бути недоступними або не вести себе так, як очікувалося.
Джеффрі Еванс

34

Тут представлений підхід для перетворення об'єкта sf в простий кадр даних без геометрії. Використовуйте 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"

EDIT

На 11/16/2018 , st_drop_geometry()був доданий в НФ, який робить це в явному вигляді:

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

-5
df <- df[,-geometry_column]

Або просто df[,-geometry_column]якщо ви не хочете створювати новий об’єкт

Де:

df - ваш об’єкт

geometry_column - стовпець, де зберігається геометрія


Не працює з мого кінця. Ви перевірили? Я роблю sf[, -sf$geometry]і отримуюError in Ops.sfc(grid.sf$geometry) : argument "e2" is missing, with no default
eivindhammers

Спробуйте sF [, - geometry] not sf [, - sf $ geometry]
ami

sf[, -geometry]не вдається з Error in -"geometry" : invalid argument to unary operator. data(meuse, package = "sp"); meuse_sf <- st_as_sf(meuse); meuse_sf[, -geometry]
Повторити

5
Це ніяк не працює. Можливо, це було в якомусь раніше sfпакеті, але зараз це не так. Усі підмножини sfкадрів даних зберігають стовпчик геометрії. Видаліть, будь ласка.
Спайдермен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.