A parte informativa do erro é que os dados nos quais você está operando são um objeto de classe S4 e, como tal, contêm slots. Isso significa que você precisa operar no slot "@data" apropriado que contém seu quadro de dados.
Se você deseja excluir "todas" as linhas com valores de NA, basta usar na.omit no slot do quadro de dados. Isso propaga através do objeto sp e remove os pontos / polígonos associados nos outros slots.
shape@data <- na.omit(shape@data)
Se você deseja remover linhas com NAs em uma coluna específica, você pode usar:
shape@data <- shape[!is.na(shape@data$col) ,]
**** Atualização 03/08/2016 Agora existe uma função de mesclagem nativa que opera em objetos sp. Você pode chamar a mesclagem da mesma maneira que faria com qualquer outro data.frame. No entanto, o argumento x é um objeto de classe SpatailDataFrame sp e y é qualquer data.frame que você deseja mesclar. Estou deixando a resposta original para fins de referência.
Devo também salientar que você não pode usar a função de mesclagem para ingressar em um objeto sp. A função de mesclagem recorre aos dados durante a operação que interrompe o relacionamento interno no objeto sp. Infelizmente, isso é algo que não é amplamente divulgado. Para mesclar um quadro de dados ao slot @data de um objeto sp, você pode usar match dessa maneira.
shape@data = data.frame(shape@data, OtherData[match(sdata@data$IDS, OtherData$IDS),])
Onde; shape é seu arquivo de formas, IDS é o identificador no qual você deseja mesclar e OtherData é o dataframe que você deseja combinar com a forma. Observe que o IDS pode ter nomes diferentes nos dois conjuntos de dados, mas precisa realmente ter os mesmos valores (não difusos).
Como alternativa, você pode usar esta função.
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)
}
Onde; x = objeto SpatialDataFrame, y = objeto de dataframe para mesclar com x, xcol = Mesclar o nome da coluna no objeto sp (é necessário citar), ycol = Mesclar o nome da coluna no objeto dataframe (é necessário citar).
Por alguma razão, não posso comentar sobre a pergunta @Kelly, por isso estou editando minha resposta original. Verifique qual versão do R e sp você está executando? Você pode executar SessionInfo () para descobrir. O comportamento de remover objetos associados nos outros slots de dados ao manipular o objeto @data só estava disponível nas duas últimas versões sp. Se não estiver executando uma versão atual, tente atualizar o pacote com "Atualizar pacotes" no menu de pacotes. Se estiver executando> = Windows Vista, certifique-se de executar como administrador. Observe também as dimensões do objeto antes e depois, ou seja, dim (shape), que representa o número de linhas / colunas. O número de linhas corresponde ao número de objetos de recurso. Você pode verificar os resultados com facilidade, verificando se o número de linhas no objeto espacial corresponde ao número de linhas no slot @data, ou seja, dim (shape);
Com as atualizações nos pacotes, sugiro o seguinte:
fonte