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);