La parte informativa dell'errore è che i dati su cui operi sono oggetti di classe S4 e come tali contengono slot. Ciò significa che è necessario operare nello slot appropriato "@data" contenente il proprio frame di dati.
Se si desidera eliminare "tutte" le righe con valori NA, è possibile utilizzare na.omit nello slot del frame di dati. Questo fa avanzare attraverso l'oggetto sp e rimuove i punti / poligoni associati negli altri slot.
shape@data <- na.omit(shape@data)
Se vuoi rimuovere le righe con NA in una colonna specifica puoi usare:
shape@data <- shape[!is.na(shape@data$col) ,]
**** Aggiornamento 03/08/2016 Esiste ora una funzione di unione nativa che opera su oggetti sp. Puoi chiamare l'unione come faresti con qualsiasi altro data.frame. Tuttavia l'argomento x è un oggetto classe sp SpatailDataFrame e y è qualsiasi data.frame che si desidera unire. Lascio la risposta originale a scopo di riferimento.
Vorrei anche sottolineare che non è possibile utilizzare la funzione di unione per unirsi a un oggetto sp. La funzione di unione ricorre ai dati durante l'operazione che interrompe la relazione interna nell'oggetto sp. Questo è qualcosa che, sfortunatamente, non è ampiamente pubblicizzato. Per unire un frame di dati allo slot @data di un oggetto sp è possibile utilizzare la corrispondenza in questo modo.
shape@data = data.frame(shape@data, OtherData[match(sdata@data$IDS, OtherData$IDS),])
Dove; shape è il tuo file shape, IDS è l'identificatore su cui vuoi unirti e OtherData è il frame di dati che vuoi combinare con shape. Si noti che IDS può avere nomi diversi nei due set di dati, ma in realtà devono avere gli stessi valori (non fuzzy).
In alternativa è possibile utilizzare questa funzione.
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)
}
Dove; x = sp Oggetto SpatialDataFrame, y = oggetto dataframe da unire con x, xcol = Unisci il nome della colonna nell'oggetto sp (è necessario citare), ycol = Unisci il nome della colonna nell'oggetto dataframe (è necessario citare).
Per qualche motivo non posso commentare la domanda di @Kelly, quindi sto modificando la mia risposta originale. Controlla quale versione di R e sp stai utilizzando? È possibile eseguire SessionInfo () per scoprirlo. Il comportamento di rimozione degli oggetti associati negli altri slot di dati durante la manipolazione dell'oggetto @data è stato disponibile solo nelle ultime due versioni di sp. Se non si esegue una versione corrente, provare ad aggiornare il pacchetto con "Aggiorna pacchetti" nel menu Pacchetti. Se in esecuzione> = Windows Vista, assicurati di eseguire come amministratore. Guarda anche le dimensioni dell'oggetto prima e dopo, ad esempio dim (forma), che rappresenta il numero di righe / colonne. Il numero di righe corrisponde al numero di oggetti funzione. Puoi controllare i risultati controllando se il numero di righe nell'oggetto spaziale corrisponde al numero di righe nello slot @data, ad esempio dim (forma);