แยก data.frame จากวัตถุคุณสมบัติอย่างง่ายใน R


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/ ......
radek

คำตอบ:


36

ตั้งค่าคุณสมบัติการst_geometryNULL

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

มีรุ่น piped นี้หรือไม่ sf %>% mutate(geometry = NULL)ไม่ทำงาน
obrl_soil

2
อาจจะเรียกว่า "geom" และไม่ใช่ "geometry" ใช่ไหม (มันจะไม่คงที่) อีกวิธีคือ `x%>% st_set_geometry (NULL) ' อย่างใดอย่างหนึ่งอาจเป็น dev ไม่ใช่ CRAN แต่ฉันไม่ได้ตรวจสอบอย่างรอบคอบว่าฉันอยู่ที่ใด
mdsumner

@mdsumner เป็นจุดที่ยอดเยี่ยมทางอ้อม ใครบางคนต้องเขียนวิธีนี้จริง ๆ มันไม่ได้เกิดขึ้นด้วยเวทมนตร์ เนื่องจาก sf เป็นคลาสอ็อบเจ็กต์ใหม่ใน R หลายวิธีอาจไม่พร้อมใช้งานหรือไม่ทำงานตามที่คาดไว้
Jeffrey Evans

33

นี่คือวิธีการที่เป็นไปได้ในการแปลงวัตถุ 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()ถูกบันทึกอยู่ในเอสเอฟซึ่งจะทำหน้าที่นี้อย่างชัดเจน:

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 [, - เรขาคณิต] ไม่ใช่ sf [, - sf $ เรขาคณิต]
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เฟรมข้อมูลทั้งหมดรักษาคอลัมน์รูปทรงเรขาคณิตไว้ กรุณาลบ
Spacedman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.