Transform level into variable

Asked

Viewed 55 times

1

I would like to create a new column, transforming Tab1612SojaRend$Nível.Territorial the levels "Great Region" and "Federation Unity" in columns. The "Unity of the Federation has to be in the same column of cities according to the State. Another point that needed to be eliminated was the state of the variable "Municipality, Large Region and Federation Unit".

library(sidrar)
Tab1612SojaRend <-get_sidra(1612,variable = 112, period = c("last" = 22),
                        geo = c("Region","State","City"),
                        geo.filter = list("Region" = 3,"Region" = 3,"Region" = 3),
                        classific = 'c81',
                        category = list(2713))

Tab1612SojaRend$Nível.Territorial <- 
as.factor(Tab1612SojaRend$Nível.Territorial)

dput(Tab1612SojaRendsudeste[c(1:10, 101:110, 24001:24010), ])
structure(list(`Nível Territorial (Código)` = c("6", "6", "6", 
"6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", 
"6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", "6", 
"6"), `Nível Territorial` = c("Município", "Município", "Município", 
"Município", "Município", "Município", "Município", "Município", 
"Município", "Município", "Município", "Município", "Município", 
"Município", "Município", "Município", "Município", "Município", 
"Município", "Município", "Município", "Município", "Município", 
"Município", "Município", "Município", "Município", "Município", 
"Município", "Município"), `Município, Grande Região e Unidade da Federação 
(Código)` = c("3100104", 
"3100104", "3100104", "3100104", "3100104", "3100104", "3100104", 
"3100104", "3100104", "3100104", "3100500", "3100500", "3100500", 
"3100500", "3100500", "3100500", "3100500", "3100500", "3100500", 
"3100500", "3506300", "3506300", "3506359", "3506359", "3506359", 
"3506359", "3506359", "3506359", "3506359", "3506359"), `Município, Grande 
 Região e Unidade da Federação` = c("Abadia dos Dourados - MG", 
"Abadia dos Dourados - MG", "Abadia dos Dourados - MG", "Abadia dos Dourados 
 - MG", 
"Abadia dos Dourados - MG", "Abadia dos Dourados - MG", "Abadia dos Dourados 
 - MG", 
"Abadia dos Dourados - MG", "Abadia dos Dourados - MG", "Abadia dos Dourados 
 - MG", 
"Açucena - MG", "Açucena - MG", "Açucena - MG", "Açucena - MG", 
"Açucena - MG", "Açucena - MG", "Açucena - MG", "Açucena - MG", 
"Açucena - MG", "Açucena - MG", "Bernardino de Campos - SP", 
"Bernardino de Campos - SP", "Bertioga - SP", "Bertioga - SP", 
"Bertioga - SP", "Bertioga - SP", "Bertioga - SP", "Bertioga - SP", 
"Bertioga - SP", "Bertioga - SP"), `Ano (Código)` = c("1996", 
"1997", "1998", "1999", "2000", "2001", "2002", "2003", "2004", 
"2005", "2008", "2009", "2010", "2011", "2012", "2013", "2014", 
"2015", "2016", "2017", "2016", "2017", "1996", "1997", "1998", 
"1999", "2000", "2001", "2002", "2003"), Ano = c("1996", "1997", 
"1998", "1999", "2000", "2001", "2002", "2003", "2004", "2005", 
"2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015", 
"2016", "2017", "2016", "2017", "1996", "1997", "1998", "1999", 
"2000", "2001", "2002", "2003"), `Variável (Código)` = c("112", 
"112", "112", "112", "112", "112", "112", "112", "112", "112", 
"112", "112", "112", "112", "112", "112", "112", "112", "112", 
"112", "112", "112", "112", "112", "112", "112", "112", "112", 
"112", "112"), Variável = c("Rendimento médio da produção", "Rendimento 
 médio da produção", 
"Rendimento médio da produção", "Rendimento médio da produção", 
"Rendimento médio da produção", "Rendimento médio da produção", 
"Rendimento médio da produção", "Rendimento médio da produção", 
"Rendimento médio da produção", "Rendimento médio da produção", 
"Rendimento médio da produção", "Rendimento médio da produção", 
"Rendimento médio da produção", "Rendimento médio da produção", 
"Rendimento médio da produção", "Rendimento médio da produção", 
"Rendimento médio da produção", "Rendimento médio da produção", 
"Rendimento médio da produção", "Rendimento médio da produção", 
"Rendimento médio da produção", "Rendimento médio da produção", 
"Rendimento médio da produção", "Rendimento médio da produção", 
"Rendimento médio da produção", "Rendimento médio da produção", 
"Rendimento médio da produção", "Rendimento médio da produção", 
"Rendimento médio da produção", "Rendimento médio da produção"
 ), `Produto das lavouras temporárias (Código)` = c("2713", "2713", 
"2713", "2713", "2713", "2713", "2713", "2713", "2713", "2713", 
"2713", "2713", "2713", "2713", "2713", "2713", "2713", "2713", 
"2713", "2713", "2713", "2713", "2713", "2713", "2713", "2713", 
"2713", "2713", "2713", "2713"), `Produto das lavouras temporárias` = 
c("Soja (em grão)", 
"Soja (em grão)", "Soja (em grão)", "Soja (em grão)", "Soja (em grão)", 
"Soja (em grão)", "Soja (em grão)", "Soja (em grão)", "Soja (em grão)", 
"Soja (em grão)", "Soja (em grão)", "Soja (em grão)", "Soja (em grão)", 
"Soja (em grão)", "Soja (em grão)", "Soja (em grão)", "Soja (em grão)", 
"Soja (em grão)", "Soja (em grão)", "Soja (em grão)", "Soja (em grão)", 
"Soja (em grão)", "Soja (em grão)", "Soja (em grão)", "Soja (em grão)", 
"Soja (em grão)", "Soja (em grão)", "Soja (em grão)", "Soja (em grão)", 
"Soja (em grão)"), `Unidade de Medida (Código)` = c("33", "33", 
"33", "33", "33", "33", "33", "33", "33", "33", "33", "33", "33", 
"33", "33", "33", "33", "33", "33", "33", "33", "33", "33", "33", 
"33", "33", "33", "33", "33", "33"), `Unidade de Medida` = c("Quilogramas 
 por 
 Hectare", 
"Quilogramas por Hectare", "Quilogramas por Hectare", "Quilogramas por 
Hectare", 
"Quilogramas por Hectare", "Quilogramas por Hectare", "Quilogramas por 
Hectare", 
"Quilogramas por Hectare", "Quilogramas por Hectare", "Quilogramas por 
Hectare", 
"Quilogramas por Hectare", "Quilogramas por Hectare", "Quilogramas por 
Hectare", 
"Quilogramas por Hectare", "Quilogramas por Hectare", "Quilogramas por 
Hectare", 
"Quilogramas por Hectare", "Quilogramas por Hectare", "Quilogramas por 
Hectare", 
"Quilogramas por Hectare", "Quilogramas por Hectare", "Quilogramas por 
Hectare", 
"Quilogramas por Hectare", "Quilogramas por Hectare", "Quilogramas por 
Hectare", 
"Quilogramas por Hectare", "Quilogramas por Hectare", "Quilogramas por 
Hectare", 
"Quilogramas por Hectare", "Quilogramas por Hectare"), Valor = c(1620, 
2202, 2200, 2400, 2800, 2880, 2700, 2800, 2429, 2700, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, 2550, 2550, NA, NA, NA, NA, NA, 
NA, NA, NA)), row.names = c(2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 
11L, 102L, 103L, 104L, 105L, 106L, 107L, 108L, 109L, 110L, 111L, 
24002L, 24003L, 24004L, 24005L, 24006L, 24007L, 24008L, 24009L, 
24010L, 24011L), class = "data.frame")
  • It looks like the API is unstable. @Everton, could share the result of dput(Tab1612SojaRend[c(1:10, 101:110, 24001:24010), ])?

  • Good morning @Tomásbarcellos. I’m not getting necklace, is giving exceeded length.

  • Fewer lines then. Maybe dput(Tab1612SojaRend[c(1:5, 101:105, 24001:24005), ]). The idea is to have a few lines from each group. If you can do it another way, you can also

  • Structure(list(Nível Territorial (Código) = c("6"), Nível Territorial = c("Municipality"), Município, Grande Região e Unidade da Federação (Código) = c("3100104"), Município, Grande Região e Unidade da Federação = c( "Bertioga - SP"), Year = c("1996"), Variável (Código) = c("112"), Variable = c("Output income m"), Produto das lavouras temporárias (Código) = c("2713"), Produto das lavouras temporárias = c("Soybeans (as grains)"), Unidade de Medida (Código) = c("33"), Unidade de Medida = ("Kilograms per hectare"), Value = c( 2429,NA), Row.Names = c(2L, 3L, 4L), class = "data.frame")

  • You can edit the question and put the result of dput there. In the question the first will fit.

1 answer

2


Since the SIDRA API was unstable or very slow, I made this small change to the code (I removed the municipalities from the query) to have similar data to work with.

library(sidrar)
Tab1612SojaRend <- get_sidra(1612,variable = 112, period = c("last" = 22),
                             geo = c("Region","State"),
                             geo.filter = list("Region" = 3,"Region" = 3),
                             # geo = "Region", geo.filter = list("Region" = 3),
                             classific = 'c81',
                             category = list(2713))

To do what you want, you can use the function spread() to spread the values Nível Territorial in several columns.

library(tidyverse)
resp1 <- Tab1612SojaRend %>% 
  spread(`Nível Territorial`, Valor)

Now it’s always time to ask: that’s exactly what you want to do?

Let’s take a look at resp1:

glimpse(resp1)
Observations: 110
Variables: 13
$ `Nível Territorial (Código)`                    <chr> "2", "2", "2", "2", "2", "2",...
$ `Grande Região e Unidade da Federação (Código)` <chr> "3", "3", "3", "3", "3", "3",...
$ `Grande Região e Unidade da Federação`          <chr> "Sudeste", "Sudeste", "Sudest...
$ `Ano (Código)`                                  <chr> "1996", "1997", "1998", "1999...
$ Ano                                             <chr> "1996", "1997", "1998", "1999...
$ `Variável (Código)`                             <chr> "112", "112", "112", "112", "...
$ Variável                                        <chr> "Rendimento médio da produção...
$ `Produto das lavouras temporárias (Código)`     <chr> "2713", "2713", "2713", "2713...
$ `Produto das lavouras temporárias`              <chr> "Soja (em grão)", "Soja (em g...
$ `Unidade de Medida (Código)`                    <chr> "33", "33", "33", "33", "33",...
$ `Unidade de Medida`                             <chr> "Quilogramas por Hectare", "Q...
$ `Grande Região`                                 <dbl> 2072, 2330, 2114, 2518, 2316,...
$ `Unidade da Federação`                          <dbl> NA, NA, NA, NA, NA, NA, NA, N...

See that the created variables merge between Grande Região have value and Unidade da Federação was NA and the other way around.

any(!is.na(resp1$`Grande Região`) & !is.na(resp1$`Unidade da Federação`))
# [1] FALSE

It turns out we broke the third principle of the tables tidy: Each observational unit must have its own table, and here we are mixing Federation Units with Regions.

For these reasons, I would find it best to work as follows:

resp2 <- split(Tab1612SojaRend, Tab1612SojaRend$`Nível Territorial`)
regioes <- resp2[[1]]
ufs <- resp2[[2]]

Another way would be to change the API call to return an observational unit (regions/Fus/municipalities) at a time.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.