
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

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/

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@gmail.com] Enviada em: terça-feira, 1 de novembro de 2016 19:14 Para: Leonard Mendonça de Assis <assis.leonard@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 <mailto: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 <http://is.na> (Area.1),0,Area.1), Area.2 = ifelse(is.na <http://is.na> (Area.2),0,Area.2), Area.3 = ifelse(is.na <http://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 <mailto: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/

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.fea@gmail.com] *Enviada em:* terça-feira, 1 de novembro de 2016 19:14 *Para:* Leonard Mendonça de Assis <assis.leonard@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.
participantes (3)
-
Cesar Rabak
-
Leonard Mendonça de Assis
-
Manoel Galdino