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@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....@gmail.com] > *Enviada em:* terça-feira, 1 de novembro de 2016 19:14 > *Para:* Leonard Mendonça de Assis <assis.leon...@gmail.com>; a lista > Brasileira oficial de discussão do programa R. <r-br@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@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@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@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. >
_______________________________________________ R-br mailing list R-br@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.