Separate data from a variable

-1

I have a variable - (Municipality), which brings me the result (Açucena - MG). How do I separate the Municipality of the State in R?

library(sidrar)
Tab1612SojaRend <-get_sidra(1612,variable = 112, period = c("last" = 22),geo ="City",
                        classific = 'c81',geo.filter = list("Region" = 3),
                        category = list(2713))
 head(Tab1612SojaRend)
 $'Abadia dos Dourados - MG'
 Município (Código)                Município Ano (Código)  Ano
 2             3100104 Abadia dos Dourados - MG         1996 1996
 3             3100104 Abadia dos Dourados - MG         1997 1997
 4             3100104 Abadia dos Dourados - MG         1998 1998
 5             3100104 Abadia dos Dourados - MG         1999 1999
 6             3100104 Abadia dos Dourados - MG         2000 2000
 7             3100104 Abadia dos Dourados - MG         2001 2001
 8             3100104 Abadia dos Dourados - MG         2002 2002
 9             3100104 Abadia dos Dourados - MG         2003 2003
 10            3100104 Abadia dos Dourados - MG         2004 2004
 11            3100104 Abadia dos Dourados - MG         2005 2005
 12            3100104 Abadia dos Dourados - MG         2006 2006
 13            3100104 Abadia dos Dourados - MG         2007 2007
 14            3100104 Abadia dos Dourados - MG         2008 2008
 15            3100104 Abadia dos Dourados - MG         2009 2009...
    
asked by anonymous 11.12.2018 / 19:43

2 answers

3

The sub_str function of the stringr package allows us to separate a string in R according to its number of characters and their positions. For example, for Açucena - MG , we have 12 characters:

Açucena - MG
123456789012

(the dozens were omitted for obvious reasons)

To separate the city from the states, just take the string Município and remove the last 5 characters: espaço , - , espaço , estado . As the string size varies by city, I have created a function to automate this:

separarCidade <- function(x){

  n <- nchar(x)  
  cidade <- str_sub(x, 1, n-5)

  return(cidade)

}

head(separarCidade(unique(Tab1612SojaRend$Município)), 10)
 [1] "Abadia dos Dourados" "Abaeté"              "Abre Campo"         
 [4] "Acaiaca"             "Açucena"             "Água Boa"           
 [7] "Água Comprida"       "Aguanil"             "Águas Formosas"     
[10] "Águas Vermelhas"

I used head and unique above just to show how the function operates in different city names. In your case, the correct one is to separarCidade(Tab1612SojaRend$Município) to separate the names of the cities that appear repeated.

What the separarCidade function does is to calculate the number of characters in each county, and then remove the substring from the beginning to the nth-5 character.

    
11.12.2018 / 20:58
3

This function separates the city and the state even if the city has '-' hyphen and has as output a list with cities and states. The test vector has a fictitious city, with hyphens where they do not actually exist.

s <- c('Abadia-dos-Dourados - MG', 'Açucena - MG')


separar <- function(x, sep = "-"){
  separador <- paste0(sep, "[^-]+$")
  cidade <- sub(separador, "", x)
  cidade <- trimws(cidade)
  separador <- paste0("^.*", sep, "([^-]+$)")
  estado <- sub(separador, '\1', x)
  estado <- trimws(estado)
  list(cidade = cidade, estado = estado)
}

separar(s)
#$cidade
#[1] "Abadia-dos-Dourados" "Açucena"            
#
#$estado
#[1] "MG" "MG"
    
12.12.2018 / 09:38