Bagian informatif dari kesalahan adalah bahwa data yang Anda operasikan adalah objek kelas S4 dan karenanya berisi slot. Ini berarti bahwa Anda perlu beroperasi pada slot "@ data" yang sesuai yang berisi kerangka data Anda.
Jika Anda ingin menghapus baris "semua" dengan nilai NA, Anda bisa menggunakan na.omit pada slot dataframe. Ini melakukan propgate melalui objek sp dan menghilangkan titik / poligon terkait di slot lain.
shape@data <- na.omit(shape@data)
Jika Anda ingin menghapus baris dengan NA di kolom tertentu, Anda dapat menggunakan:
shape@data <- shape[!is.na(shape@data$col) ,]
**** Perbarui 03/08/2016 Sekarang ada fungsi gabungan asli yang beroperasi pada objek sp. Anda dapat memanggil penggabungan dengan cara yang sama seperti yang Anda lakukan dengan bingkai data lainnya. Namun argumen x adalah objek kelas sp SpatailDataFrame dan y adalah data.frame apa pun yang ingin Anda gabungkan. Saya meninggalkan jawaban asli untuk tujuan referensi.
Saya juga harus menunjukkan bahwa Anda tidak dapat menggunakan fungsi gabungan untuk bergabung ke objek sp. Fungsi gabungan menggunakan data selama operasi yang memutuskan hubungan internal dalam objek sp. Ini adalah sesuatu yang, sayangnya, tidak diiklankan secara luas. Untuk menggabungkan dataframe ke slot @data objek sp Anda dapat menggunakan kecocokan dengan cara ini.
shape@data = data.frame(shape@data, OtherData[match(sdata@data$IDS, OtherData$IDS),])
Dimana; bentuk adalah file bentuk Anda, IDS adalah pengidentifikasi yang ingin Anda gabungkan dan OtherData adalah kerangka data yang ingin Anda gabungkan dengan bentuk. Perhatikan bahwa IDS dapat berupa nama yang berbeda dalam dua set data tetapi harus benar-benar memiliki nilai yang sama (bukan fuzzy).
Atau Anda dapat menggunakan fungsi ini.
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)
}
Dimana; x = sp Objek SpatialDataFrame, y = objek dataframe untuk digabungkan dengan x, xcol = Gabungkan nama kolom dalam objek sp (perlu mengutip), ycol = Gabungkan nama kolom dalam objek dataframe (perlu mengutip).
Untuk beberapa alasan saya tidak bisa mengomentari @Kelly pertanyaan jadi saya mengedit jawaban asli saya. Periksa versi R dan sp apa yang Anda jalankan? Anda dapat menjalankan SessionInfo () untuk mengetahuinya. Perilaku menghapus objek terkait dalam slot data lain saat memanipulasi objek data hanya tersedia di beberapa versi sp terakhir. Jika tidak menjalankan versi saat ini, coba perbarui paket dengan "Perbarui paket" di bawah menu paket. Jika menjalankan> = Windows Vista pastikan untuk menjalankan sebagai administrator. Juga perhatikan dimensi objek Anda sebelum dan sesudah, yaitu redup (bentuk), yang mewakili jumlah baris / cols. Jumlah baris sesuai dengan jumlah objek fitur. Anda dapat mengecek hasilnya dengan memeriksa untuk melihat apakah jumlah baris dalam objek spasial cocok dengan jumlah baris dalam slot @ data yaitu, redup (bentuk);