Loại bỏ các hàng trong shapefile trong R


12

Tôi đã nhập một shapefile vào R và nối nó vào một cái bàn. Shapefile của tôi chứa tất cả các id điều tra dân số, trong khi bảng của tôi chỉ chứa các id điều tra dân số được chọn. Bây giờ tôi đang cố xóa tất cả các hàng không khớp.

Đây là dữ liệu của tôi trông như thế nào (Tôi đang cố xóa tất cả các hàng bằng NA, vì vậy hai dữ liệu cuối cùng sẽ cần phải được xóa):

  CTUID   Cluster   Average
5350007.01  1       124.53
5350007.02  1       234.87
5350010.01  4       110.11
5350010.02  5       187.68
5350001     NA        NA
5350002     NA        NA

Tôi đã thử sử dụng mã dòng này:

shape2[!(rowSums(is.na(shape2))==NCOL(shape2)),]

Điều này đã cho tôi lỗi này:

Error in rowSums(is.na(shape2)) : 
  'x' must be an array of at least two dimensions
In addition: Warning message:
In is.na(shape2) : is.na() applied to non-(list or vector) of type 'S4'

Tôi không thành thạo R, vì vậy bất kỳ trợ giúp sẽ thực sự được đánh giá cao. Nếu bạn có thể bao gồm một lời giải thích ngắn gọn sẽ là tuyệt vời.

Câu trả lời:


13

Phần thông tin của lỗi là dữ liệu bạn vận hành là một đối tượng lớp S4 và như vậy có chứa các vị trí. Điều này có nghĩa là bạn cần phải hoạt động trên vị trí thích hợp "@data" có chứa khung dữ liệu của bạn.

Nếu bạn muốn xóa các hàng "tất cả" có giá trị NA, bạn chỉ có thể sử dụng na.omit trên khe dữ liệu. Điều này không propgate thông qua đối tượng sp và loại bỏ các điểm / đa giác liên quan trong các vị trí khác.

shape@data <- na.omit(shape@data)

Nếu bạn muốn xóa các hàng có NA trong một cột cụ thể, bạn có thể sử dụng:

shape@data <- shape[!is.na(shape@data$col) ,]

**** Cập nhật 03/08/2016 Hiện tại đã có chức năng hợp nhất riêng hoạt động trên các đối tượng sp. Bạn có thể gọi hợp nhất theo cách tương tự như với bất kỳ data.frame nào khác. Tuy nhiên, đối số x là một đối tượng lớp Sp SpatailDataFrame và y là bất kỳ data.frame nào mà bạn muốn hợp nhất. Tôi đang để lại câu trả lời ban đầu cho mục đích tham khảo.


Tôi cũng nên chỉ ra rằng bạn không thể sử dụng chức năng hợp nhất để tham gia vào một đối tượng sp. Hàm hợp nhất sử dụng dữ liệu trong quá trình hoạt động phá vỡ mối quan hệ nội bộ trong đối tượng sp. Thật không may, đây là điều không may, không được quảng cáo rộng rãi. Để hợp nhất một khung dữ liệu vào khe @data của một đối tượng sp, bạn có thể sử dụng khớp theo cách này.

shape@data = data.frame(shape@data, OtherData[match(sdata@data$IDS, OtherData$IDS),])

Ở đâu; hình dạng là tệp hình dạng của bạn, IDS là mã định danh bạn muốn hợp nhất và OtherData là khung dữ liệu mà bạn muốn kết hợp với hình dạng. Lưu ý rằng IDS có thể là các tên khác nhau trong hai bộ dữ liệu nhưng thực sự cần phải có cùng giá trị (không mờ).

Ngoài ra, bạn có thể sử dụng chức năng này.

join.sp.df <- function(x, y, xcol, ycol) {
  x$sort_id <- 1:nrow(as(x, "data.frame"))  
    x.dat <- as(x, "data.frame")  
     x.dat2 <- merge(x.dat, y, by.x = xcol, by.y = ycol)  
    x.dat2.ord <- x.dat2[order(x.dat2$sort_id), ]  
  x2 <- x[x$sort_id %in% x.dat2$sort_id, ]  
  x2.dat <- as(x2, "data.frame") 
    row.names(x.dat2.ord) <- row.names(x2.dat)  
  x2@data <- x.dat2.ord  
  return(x2)
}

Ở đâu; x = sp Đối tượng SpatialDataFrame, đối tượng y = dataframe để hợp nhất với x, xcol = Hợp nhất tên cột trong đối tượng sp (cần trích dẫn), ycol = Hợp nhất tên cột trong đối tượng dataframe (cần trích dẫn).

Vì một số lý do tôi không thể nhận xét về câu hỏi @Kelly vì vậy tôi đang chỉnh sửa câu trả lời ban đầu của mình. Kiểm tra phiên bản R và sp bạn đang chạy? Bạn có thể chạy SessionInfo () để tìm hiểu. Hành vi loại bỏ các đối tượng liên quan trong các khe dữ liệu khác khi thao tác đối tượng @data chỉ có sẵn trong các phiên bản sp sp cuối cùng. Nếu không chạy phiên bản hiện tại, hãy thử cập nhật gói với "Cập nhật gói" trong menu gói. Nếu đang chạy> = Windows Vista, hãy đảm bảo chạy với tư cách quản trị viên. Cũng nhìn vào kích thước đối tượng trước và sau của bạn, tức là mờ (hình dạng), đại diện cho số lượng hàng / cols. Số lượng hàng tương ứng với số lượng đối tượng tính năng. Bạn có thể kiểm tra kết quả bằng cách kiểm tra xem số lượng hàng trong đối tượng không gian có khớp với số lượng hàng trong khe @data tức là mờ (hình dạng);


Cảm ơn bạn đã giúp đỡ! Tôi làm lại việc nối không gian vì tôi đã sử dụng 'hợp nhất' thay vì 'khớp'. Tôi đã xóa tất cả các hàng NA, nhưng hình dạng vẫn còn trong shapefile khi tôi vẽ nó. Bất kỳ suy nghĩ về lý do tại sao điều này đang xảy ra?
Kelly

Một sửa đổi cho câu trả lời này là cần thiết ở sp 1.0-15. Một phiên bản cụ thể của hàm hợp nhất bây giờ được gọi, khi được thông qua một đối tượng lớp sp, thực hiện chính xác khi bạn thực hiện khớp một đối một để giữ cho kích thước hàng phù hợp với các vị trí được liên kết.
Jeffrey Evans

7

Với các bản cập nhật trong các gói tôi sẽ đề xuất như sau:

shape <- shape[!is.na(shape@data$col),]

Trong các phiên bản trước đó có thể dẫn đến "hình dạng" bị ép buộc thành data.frame. Thật tuyệt khi các nhà phát triển sp đang bắt đầu làm cho một số phương thức R tiêu chuẩn hoạt động trên các đối tượng sp. Cảm ơn đã cung cấp bản cập nhật này.
Jeffrey Evans
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.