Rのシンプルフィーチャオブジェクトからdata.frameを抽出する


43

シンプルフィーチャオブジェクトからジオメトリ列を除くすべてを抽出するsf-native(つまり「正しい」)方法はありますか?これは動作します

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/...
ラデク

回答:


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ではなくdevにある可能性がありますが、ローカルにいる場所を注意深くチェックしていません。
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"

編集

2018年11月16日st_drop_geometry()明示的にこれを行い、SF、に追加されました。

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]とgetError in Ops.sfc(grid.sf$geometry) : argument "e2" is missing, with no default
eivindhammers

sF [、-sf $ geometry]ではなく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]
-eivindhammers

5
これは決して機能しません。おそらく以前のsfパッケージで行われたかもしれませんが、現在はそうではありません。sfデータフレームのすべてのサブセットは、ジオメトリ列を保持します。削除してください。
スペースマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.