Xóa một số đa giác nhất định khỏi SpatialPolygonDataFrame


9

Tôi đang sử dụng thư viện R maptools để phân tích shapefile thành một danh sách các đa giác. Hàm readShapeSpatial

shp <- readShapeSpatial("<path to my shapefile>")

cung cấp cho tôi một đối tượng SpatailPolygonDataFrame . Trong ví dụ của tôi, SpatialPolygonsDataFrame của tôi có các cột sau:

> names(shp)
[1] "AREA"       "PERIMETER"  "COMAREA_"   "COMAREA_ID" "AREA_NUMBE"
[6] "COMMUNITY"  "AREA_NUM_1" "SHAPE_AREA" "SHAPE_LEN

Tôi biết rằng tôi có thể loại bỏ một số đa giác bằng cách của họ row.id, ví dụ

shp.dropI  <- shp[-i, ]
shp.subset <- shp[i %in% c(1,2,3),]

Bây giờ tôi muốn thả (các) đa giác nhất định với một điều kiện, nói AREA > 10. Làm thế nào để tôi thực hiện điều này một cách thanh lịch? Phương pháp duy nhất tôi có bây giờ là lặp qua tất cả các hàng và tìm tương ứng row.id.


Hãy cảnh giác với các thuộc tính "KHU". Không có gì đảm bảo đó là khu vực thực tế, phải không? Bạn có thể sử dụng rgeos :: gArea (x, byid = TRUE) để tính toán nó và rgdal :: spTransform nếu bạn cần thay đổi phép chiếu cho phép tính đó.
mdsumner

@mdsumner bạn hoàn toàn đúng. Điểm tốt
thekingofkings

Câu trả lời:


7

Đầu tiên, tôi rất khuyên bạn nên sử dụng readOGR, từ thư viện rgdal, để đọc shapefile của bạn. Nó sẽ giữ lại thông tin chiếu (proj4 chuỗi) và lưu lại nhiều vấn đề đau đầu, khi khớp chuỗi, sử dụng các chức năng khác.

Hai cách nhanh chóng để thực hiện những gì bạn đang có sau khi sử dụng một chỉ mục hoặc sử dụng tập hợp con. Điều này sẽ giữ lại các đa giác có diện tích <10 (giảm những người> 10).

shp.sub <- shp[shp$AREA < 10,] 
shp.sub <- subset(shp, AREA < 10)

Đẹp! Tôi mới nhận ra câu hỏi này có thể được khái quát thành "cách chọn một số hàng nhất định trong DataFrame với R". Và cảm ơn vì lời đề nghị quá
thekingofkings
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.