[R-br] mutate vs within

Leonard Mendonça de Assis assis.leonard em gmail.com
Terça Novembro 1 18:18:17 BRST 2016


Boa tarde a todos

 

Surgiu uma dúvida conceitual aqui:

 

Eu tenho um data.frame que precisa unir com vários outros, além de fazer
várias transformações. Estou utilizando a seguinte sequencia para fazer tudo

 

bhz.data <-

  read_csv2(

    "Belo Horizonte 20161027.csv",

    col_types=colunas) %>%

  filter(Filtro == 1 & Filtro.Votar==1) %>%

  select(-Filtro, -Filtro.Votar) %>%

  left_join(label.Sexo,by=c("Sexo"="value")) %>% select(-Sexo) %>%

  left_join(label.Faixa.Idade, by=c("Faixa.Idade"="value")) %>%
select(-Faixa.Idade) %>%

  left_join(label.Renda, by=c("Renda"="value")) %>% select(-Renda) %>%

  left_join(label.classe, by=c("Renda.Classe"="value")) %>%
select(-Renda.Classe) %>%

  left_join(label.Escolaridade, by=c("Escolaridade"="value")) %>%
select(-Escolaridade) %>%

  left_join(label.Etinia, by=c('Etinia'="value")) %>% select(-Etinia) %>%

  left_join(label.Religião, by=c("Religião"="value")) %>% select(-Religião)
%>%

  left_join(label.Trabalha, by=c("Trabalha"="value")) %>% select(-Trabalha)
%>%

mutate(Area.1 = ifelse(is.na(Area.1),0,Area.1), Area.2 =
ifelse(is.na(Area.2),0,Area.2),

         Area.3 = ifelse(is.na(Area.3),0,Area.3)) %>%

  mutate(area.Educação =

           ifelse(Area.1 == 1,1,0) + ifelse(Area.2 == 1,1,0) + ifelse(Area.3
== 1,1,0),

         area.Habitação =

          ifelse(Area.1 == 2,1,0) + ifelse(Area.2 == 2,1,0) + ifelse(Area.3
== 2,1,0),

         area.Limpeza =

           ifelse(Area.1 == 3,1,0) + ifelse(Area.2 == 3,1,0) + ifelse(Area.3
== 3,1,0),

         area.Obras.Mobilidade =

           ifelse(Area.1 == 4,1,0) + ifelse(Area.2 == 4,1,0) + ifelse(Area.3
== 4,1,0),

         area.Obras.Pavimentação =

           ifelse(Area.1 == 5,1,0) + ifelse(Area.2 == 5,1,0) + ifelse(Area.3
== 5,1,0),

         area.Saneamento =

           ifelse(Area.1 == 6,1,0) + ifelse(Area.2 == 6,1,0) + ifelse(Area.3
== 6,1,0),

         area.Saúde =

           ifelse(Area.1 == 7,1,0) + ifelse(Area.2 == 7,1,0) + ifelse(Area.3
== 7,1,0),

         area.Transpoorte =

           ifelse(Area.1 == 8,1,0) + ifelse(Area.2 == 8,1,0) + ifelse(Area.3
== 8,1,0),

         area.Conservação =

           ifelse(Area.1 == 9,1,0) + ifelse(Area.2 == 9,1,0) + ifelse(Area.3
== 9,1,0),

         area.Acessibilidade =

           ifelse(Area.1 == 10,1,0) + ifelse(Area.2 == 10,1,0) +
ifelse(Area.3 == 10,1,0),

         area.Combate.Mosquito =

           ifelse(Area.1 == 11,1,0) + ifelse(Area.2 == 11,1,0) +
ifelse(Area.3 == 11,1,0),

         area.MeioAmbiente =

           ifelse(Area.1 == 12,1,0) + ifelse(Area.2 == 12,1,0) +
ifelse(Area.3 == 12,1,0),

         area.Social =

           ifelse(Area.1 == 13,1,0) + ifelse(Area.2 == 13,1,0) +
ifelse(Area.3 == 13,1,0),

         area.Esporte.Lazer =

           ifelse(Area.1 == 14,1,0) + ifelse(Area.2 == 14,1,0) +
ifelse(Area.3 == 14,1,0),

         area.Geração.Empregos =

           ifelse(Area.1 == 15,1,0) + ifelse(Area.2 == 15,1,0) +
ifelse(Area.3 == 15,1,0)) %>%

  select(-Area.1, -Area.2, -Area.3)

 

A questão é a seguinte:

No caso da variável área, que é recodificada de 3 para 15 variáveis, quando
eu substituo esta sequencia enorme de mutate por um within, as variáveis
ficam em uma ordem diferente da que eu preciso. A questão é: como deixar o
código mais limpo nesta situação, visto que esta alternativa funciona, mas
parece ser meio gambiarra?

 

Leonard

-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20161101/0980f0e8/attachment.html>


Mais detalhes sobre a lista de discussão R-br