[R-br] RES: mutate vs within

Cesar Rabak cesar.rabak em gmail.com
Quarta Novembro 2 18:07:38 BRST 2016


Leonard,

Seu problema me parece que seria muito bem atendido ("código limpo",
"claro", etc.) pela função recode do pacote car.

Como parece-me que você tem bastante coisa para converter talvez a curva de
aprendizado dessa nova função possa ser um investimento frente ao possível
resultado.

HTH
--
Cesar Rabak


2016-11-01 22:05 GMT-02:00 Leonard Mendonça de Assis via R-br <
r-br em listas.c3sl.ufpr.br>:

> O within é como se fosse o mutate, funciona como o with, só que retorna o
> data.frame.
>
>
>
> O problema é que eu tenho uma variável múltipla resposta Area (1 a 3)  que
> foi planejada de maneira errada, eu vou analisar ela como item de TRI, não
> como tabela de frequência (o que os malucos coletaram).
>
> O problema é que o “within” coloca as variáveis no data.frame na ordem que
> ele quer, misturando copm outras. Isso me obriga a fazer outras coisas no
> código.
>
> Já om o mutate, eu tenho que quebrar em etapas extras, pois ele executa na
> ordem que ele quer e o que está me incomodando ´eisso, pois uma das coisas
> que faço é apagar a variável velha.
>
>
>
> Queria uma solução menos gambiarra que a que mostrei
>
>
>
> *De:* Manoel Galdino [mailto:mcz.fea em gmail.com]
> *Enviada em:* terça-feira, 1 de novembro de 2016 19:14
> *Para:* Leonard Mendonça de Assis <assis.leonard em gmail.com>; a lista
> Brasileira oficial de discussão do programa R. <r-br em listas.c3sl.ufpr.br>
> *Assunto:* Re: [R-br] mutate vs within
>
>
>
> Não sei o que é o within que você fala, e seu exemplo não é lá minimamente
> reproduzível. Então fica difícil ajudar.
>
> Dito isso, talvez você deveria usar o spread (do pacote tidyr) em área.
> Mas é difícil ajudar mais sem saber o que você quer fazer direito e sem o
> exemplo reproduzível.
>
>
>
> Abraço,
>
>
>
> 2016-11-01 18:18 GMT-02:00 Leonard Mendonça de Assis via R-br <
> r-br em listas.c3sl.ufpr.br>:
>
> 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
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>
>
>
>
>
> --
>
> Manoel Galdino
> https://sites.google.com/site/galdinomcz/
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20161102/6a00be67/attachment.html>


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