La parte informativa del error es que los datos en los que está operando son un objeto de clase S4 y, como tal, contienen 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 de NA, puede usar na.omit en la ranura del marco de datos. Esto se 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 desea eliminar filas con NA en una columna específica, puede usar:
shape@data <- shape[!is.na(shape@data$col) ,]
**** Actualización 03/08/2016 Ahora hay una función de fusión nativa que opera en objetos sp. Puede llamar a fusionar de la misma manera que lo haría con cualquier otro data.frame. Sin embargo, el argumento x es un objeto de clase sp SpatailDataFrame e y es cualquier data.frame que desee fusionar. Estoy dejando la respuesta original para fines de referencia.
También debo señalar que no puede usar la función de fusión para unirse a un objeto sp. La función de fusión recurre a los datos durante la operación que rompe la relación interna en el objeto sp. Esto es algo que, desafortunadamente, no se publicita ampliamente. Para fusionar un marco de datos en la ranura @data de un objeto sp, puede usar la coincidencia de esta manera.
shape@data = data.frame(shape@data, OtherData[match(sdata@data$IDS, OtherData$IDS),])
Dónde; shape es su archivo de forma, IDS es el identificador con el que desea fusionarse y OtherData es el marco de datos que desea combinar con shape. Tenga en cuenta que los IDS pueden ser nombres diferentes en los dos conjuntos de datos, pero en realidad deben ser los mismos valores (no difusos).
Alternativamente, puede usar 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)
}
Dónde; x = sp Objeto SpatialDataFrame, y = objeto de marco de datos para combinar con x, xcol = Combinar nombre de columna en objeto sp (necesita comilla), ycol = Combinar nombre de columna en objeto de marco de datos (necesita comilla).
Por alguna razón, no puedo comentar sobre la pregunta de @Kelly, así que estoy editando mi respuesta original. Comprueba qué versión de R y sp estás ejecutando? Puede ejecutar SessionInfo () para averiguarlo. El comportamiento de eliminar objetos asociados en las otras ranuras de datos al manipular el objeto @data solo ha estado disponible en las últimas dos versiones 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 ejecutarlo como administrador. Observe también las dimensiones del objeto antes y después, es decir, dim (forma), que representa el número de filas / columnas. El número de filas corresponde con el número de objetos de características. Puede verificar los resultados comprobando si el número de filas en el objeto espacial coincide con el número de filas en la ranura @data, es decir, tenue (forma);
Con las actualizaciones en los paquetes, sugeriría lo siguiente:
fuente