Removendo colunas em um SpatialPolygonsDataFrame no R?


8

Meu quadro de dados de polígonos espaciais (SPDF) contém muitas colunas (variáveis) e desejo remover completamente a maioria das colunas.

Eu sei como fazer isso com um quadro de dados regular em R, mas não tenho certeza de como fazer isso ao lidar com o objeto da classe SpatialPolygonsDataFrame?

Respostas:


14

Use a sintaxe object_ name[,-(1:5)]para remover as colunas 1 a 5 ou object_name[,-c(1,5)]para soltar as colunas 1 e 5. Veja o exemplo abaixo (com comentários):

require(maptools)

#load shapefile from maptools package to make a reproducible example.
xx <- readShapeSpatial(system.file("shapes/sids.shp", package="maptools")[1],
                   IDvar="FIPSNO", proj4string=CRS("+proj=longlat +ellps=clrk66"))

class(xx) #check the object class
#[1] "SpatialPolygonsDataFrame"
#attr(,"package")
#[1] "sp"

head(xx@data,3) #print first three rows from the slot 'data'

       AREA PERIMETER CNTY_ CNTY_ID      NAME  FIPS FIPSNO CRESS_ID BIR74 SID74
      0.111     1.392  1904    1904  Alamance 37001  37001        1  4672    13
      0.066     1.070  1950    1950 Alexander 37003  37003        2  1333     0
      0.061     1.231  1827    1827 Alleghany 37005  37005        3   487     0

      NWBIR74 BIR79 SID79 NWBIR79
         1243  5767    11    1397
          128  1683     2     150
           10   542     3      12

xxx <- xx[,-(1:5)] #remove columns 1 to 5

head(xxx@data,3) #print the subsetted data frame

     FIPS FIPSNO CRESS_ID BIR74 SID74 NWBIR74 BIR79 SID79 NWBIR79
     37001  37001        1  4672    13    1243  5767    11    1397
     37003  37003        2  1333     0     128  1683     2     150
     37005  37005        3   487     0      10   542     3      12

Para usar os nomes das colunas, você pode implementar a solução de Joris Meys aqui , que consiste em criar uma lista de nomes e usá-la para descartar as colunas.

Por exemplo:

drops <- c("AREA","PERIMETER") # list of col names
xxx <- xx[,!(names(xx) %in% drops)] #remove columns "AREA" and "PERIMETER"

1

Aqui está uma alternativa usando a função select do pacote dplyr:

library(dplyr)

SPDF@data <- SPDF@data %>% 
select(1, 3) #keeps column 1 and column 3 in the spdf object.

3
Isso me deixa nervosa ao operar no slot @data usando pacotes ou funções não projetadas especificamente para objetos espaciais. É por isso que existe uma versão especial de mesclagem. A versão base do mesclagem estraga os nomes das linhas e quebra os relacionamentos entre os atributos e os recursos.
Jeffrey Evans

0

O comando a seguir também faz o truque, mas você deve saber os números de sua coluna:

temp<-df[c(1:6,99:103)]
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.