La parte informativa del error es que los datos sobre los que opera son un objeto de clase S4 y como tal contiene ranuras. Esto significa que debe operar en la ranura apropiada "@data" que contiene su marco de datos.
Si desea eliminar "todas" las filas con valores NA, puede utilizar na.omit en la ranura del marco de datos. Esto propaga a través del objeto sp y elimina los puntos/polígonos asociados en las otras ranuras.
shape@data <- na.omit(shape@data)
Si quieres eliminar las filas con NA's en una columna específica puedes utilizar:
shape@data <- shape[shape@data$col != NA ,]
También debo señalar que no se puede utilizar la función de fusión para unirse a un objeto sp. La función merge resorbe los datos durante la operación lo que rompe la relación interna en el objeto sp. Esto es algo que, desgraciadamente, no se anuncia mucho. Para fusionar un dataframe a la ranura @data de un objeto sp se puede utilizar match de esta manera.
shape@data = data.frame(shape@data, OtherData[match(sdata@data$IDS, OtherData$IDS),])
Donde: shape es su archivo shape, IDS es el identificador que desea combinar y OtherData es el marco de datos que desea combinar con shape. Tenga en cuenta que los IDS pueden tener nombres diferentes en los dos conjuntos de datos, pero tienen que ser realmente los mismos valores (no difusos).
También puede utilizar esta función.
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)
}
Donde; x=objeto SpatialDataFrame, y=objeto dataframe a fusionar con x, xcol=nombre de la columna a fusionar en el objeto sp (debe citarse), ycol=nombre de la columna a fusionar en el objeto dataframe (debe citarse).
Por alguna razón no puedo comentar la pregunta de @Kelly así que edito mi respuesta original. Comprueba qué versión de R y sp estás ejecutando. Puedes ejecutar SessionInfo() para averiguarlo. El comportamiento de eliminar los objetos asociados en las otras ranuras de datos cuando se manipula el objeto @data sólo ha estado disponible en las últimas versiones de sp. Si no está ejecutando una versión actual, intente actualizar el paquete con "Actualizar paquetes" en el menú de paquetes. Si ejecuta >=Windows Vista asegúrese de ejecutar como administrador. También mire las dimensiones de su objeto antes y después, es decir, dim(shape), que representa el número de filas/cajas. El número de filas se corresponde con el número de objetos de características. Puede comprobar los resultados verificando si el número de filas en el objeto espacial coincide con el número de filas en la ranura @data, es decir, dim(shape); dim(shape@data)