[R-br] Ajuda com a passagem incorreta de variável string para uma função do R

Cesar Rabak cesar.rabak em gmail.com
Ter Jan 15 22:31:28 -02 2019


Bruno,

*Acho* que estou começando a entender a sua demanda, mas para ter certeza é
necessário ainda elicitar umas coisinhas:

a) No exemplo que você passa como resultado desejado você tem uma mescla de
proporções com totais absolutos dos votos para a nova coluna oriunda da
operação de mescla;

b) Como você usa Região como a chave comum entre as duas tabelas, os
valores de contagem de votos são repetidos pois na tabela perc_validos  a
região é subdividida por UF enquanto na tabela votos_regiao há apenas o
agregado e não a quebra por UF.

O resultado dessa forma faz sentido para você e é exatamente o que você
deseja da operação da sua função Consolida?

HTH
--
Cesar Rabak


On Tue, Jan 15, 2019 at 8:01 AM Bruno César Pasquini por (R-br) <
r-br em listas.c3sl.ufpr.br> wrote:

> *Daniel* e *César*,
>
> Agradeço muito o terem tentado rodar meu código...
>
> Arranjei este exemplo para tentar resolver um problema que estou tendo com
> dados da indústria química alemã onde trabalho, dados que não posso expor
> aqui. Arranjei um exemplo fake (ainda que com dados reais) para pedir a
> ajuda no processamento da função.
>
> Minha expectativa é a de conseguir que o R selecione apenas a variável
> chave para o cruzamento (*Regiao*) mais alguma outra (uma das colunas com
> contagem de votos) cuja interpretação não estou conseguindo acertar no meu
> código R.
>
> Como o problema é este, eu deixei os nomes das demais variáveis
> propositalmente diferentes, eu não espero mesmo que o R associe uma
> variável chamada "Ciro" com outra que se chama "Ciro Gomes" (a menos que eu
> o faça manualmente depois...).
>
> O que eu gostaria de obter neste cruzamento a ser feito pela função é algo
> como (vamos supor que peça a coluna dos votos dos demais candidatos):
>
> Regiao Estado Bolsonaro Haddad Ciro Outros 'Demais Candidatos'
> 'Centro-Oeste' 'Distrito Federal' 0.5837 0.1187 0.1660 0.1316 952142
> 'Centro-Oeste' 'Goias' 0.5724 0.2186 0.0860 0.1230 952142
> 'Centro-Oeste' 'Mato Grosso' 0.6004 0.2476 0.0559 0.0961 952142
> 'Centro-Oeste' 'Mato Grosso do Sul' 0.5506 0.2387 0.0804 0.1304 952142
> 'Exterior' '' 0.5879 0.1010 0.1452 0.1659 32078
> 'Nordeste' 'Alagoas' 0.3440 0.4475 0.1012 0.1072 1894092
> 'Nordeste' 'Bahia' 0.2341 0.6028 0.0941 0.0690 1894092
> 'Nordeste' 'Ceara' 0.2174 0.3312 0.4095 0.0419 1894092
> (...)
> É a tabela *perc_validos* com o acréscimo da coluna "Demais Candidatos".
>
> Meu desafio é separar, dentre as várias colunas na tabela *votos_regiao*,
> apenas a coluna chave (*Regiao*) e a coluna que eu apontar como parametro
> na função (neste exemplo acima a "Demais Candidatos"). Da maneira que
> coloquei (as 3 versões da função *consolida*), nenhuma delas tem
> funcionado e é nisso que eu preciso da ajuda para entender no que estou
> errando. O fato de gerar duplicidades e de que (no exemplo acima) a coluna
> "Outros" não se relacionar com a coluna "Demais Candidatos" nao são
> problema, eu tratarei na sequência do meu código. Para mim o importante é
> acertar a seleção para o cruzamento...
>
> Assim, como eu faço para selecionar uma das colunas com contagem de votos
> além da variável chave nas funções? O que eu estou fazendo de errado?
>
> Grato mais uma vez pela atenção de vocês,
>
> Bruno César Pasquini
> Estatístico.
>
>
> Em sex, 11 de jan de 2019 às 23:37, Cesar Rabak por (R-br) <
> r-br em listas.c3sl.ufpr.br> escreveu:
>
>> Bruno, apenas uma dúvida: como você espera fazer um *merge* em dois
>> conjuntos de dados cujas "chaves" (no data.table, que um dataframe) as
>> variáveis ou colunas... ou sendo mais simplório: como você espera que o SW
>> estatístico *saiba* que  Bolsonaro na data.table  perc_validos é a *mesma
>> coisa* que 'Jair Bolsonaro' na votos_regiao 🤔??
>>
>> HTH
>> --
>> Cesar Rabak
>>
>>
>> On Fri, Jan 11, 2019 at 9:17 AM Bruno César Pasquini por (R-br) <
>> r-br em listas.c3sl.ufpr.br> wrote:
>>
>>> PessoALL, bom dia!
>>>
>>> Estou com dificuldade em passar os valores de uma variável string para
>>> uma função do R de forma que esta função a interprete corretamente.
>>>
>>> Por exemplo, para indicar qual coluna eu quero que a função selecione
>>> para um cruzamento de 2 data.tables (acho melhor que usar data.frames pela
>>> melhor performance do data.table)... Eu poderia levar a tabela inteira para
>>> o cruzamento, mas depois teria que deletar as demais colunas manualmente,
>>> gostaria de resolver com a função conforme o exemplo abaixo.
>>>
>>> Construí este exemplo baseado nos resultados do primeiro turno das
>>> últimas eleições presidenciais. Normalmente eu importaria as tabelas, mas
>>> eu as declaro aqui para a devida reprodução do código.
>>> Fonte:
>>> https://pt.wikipedia.org/wiki/Resultados_da_eleição_presidencial_no_Brasil_em_2018#Primeiro_turno_3
>>>
>>> Meu propósito é entender o que estou fazendo de errado (ou deixando de
>>> fazer...), não estou propondo um debate político-ideológico que foge ao
>>> escopo desta lista...
>>>
>>> Especificamente, eu não consigo fazer a função "*consolida*" (na
>>> verdade as versões 1, 2 e 3 desta função) interprete(m) o parâmetro "
>>> *Candidato*" corretamente.
>>> Eu tento usar o parâmetro sozinho e com as funções "*substitute*" e "
>>> *eval*", mas não consigo levar a coluna com os números de votação do
>>> candidato por região para o cruzamento. Sim, eu sei que o cruzamento como o
>>> desenhei vai gerar duplicidade, mas o que preciso é que o cruzamento
>>> "funcione"...
>>>
>>> Vocês podem me ajudar a entender o que estou fazendo de errado?
>>>
>>> Muito grato pela atenção de cada um(a),
>>> Bruno César Pasquini
>>> Estatístico
>>>
>>> ####### Codigo Reprodutivel...
>>>
>>> library(data.table)
>>>
>>> ### Percentual de Votos Validos nos estados e no exterior...
>>> perc_validos <- data.table(Regiao = c('Centro-Oeste', 'Centro-Oeste',
>>> 'Centro-Oeste', 'Centro-Oeste', 'Exterior', 'Nordeste', 'Nordeste',
>>> 'Nordeste', 'Nordeste', 'Nordeste', 'Nordeste', 'Nordeste', 'Nordeste',
>>> 'Nordeste', 'Norte', 'Norte', 'Norte', 'Norte', 'Norte', 'Norte', 'Norte',
>>> 'Sudeste', 'Sudeste', 'Sudeste', 'Sudeste', 'Sul', 'Sul', 'Sul'),
>>>                            Estado = c('Distrito Federal', 'Goias', 'Mato
>>> Grosso', 'Mato Grosso do Sul', '', 'Alagoas', 'Bahia', 'Ceara', 'Maranhao',
>>> 'Paraiba', 'Pernambuco', 'Piaui', 'Rio Grande do Norte', 'Sergipe', 'Acre',
>>> 'Amapa', 'Amazonas', 'Para', 'Rondonia', 'Roraima', 'Tocantins', 'Espirito
>>> Santo', 'Minas Gerais', 'Rio de Janeiro', 'Sao Paulo', 'Parana', 'Rio
>>> Grande do Sul', 'Santa Catarina'),
>>>                            Bolsonaro = c(0.5837, 0.5724, 0.6004, 0.5506,
>>> 0.5879, 0.3440, 0.2341, 0.2174, 0.2428, 0.3130, 0.3057, 0.1876, 0.3021,
>>> 0.2721, 0.6224, 0.4074, 0.4348, 0.3619, 0.6224, 0.6297, 0.4464, 0.5476,
>>> 0.4831, 0.5979, 0.5300, 0.5689, 0.5263, 0.6582),
>>>                            Haddad = c(0.1187, 0.2186, 0.2476, 0.2387,
>>> 0.1010, 0.4475, 0.6028, 0.3312, 0.6126, 0.4546, 0.4887, 0.6340, 0.4119,
>>> 0.5009, 0.1853, 0.3277, 0.4030, 0.4139, 0.2036, 0.1785, 0.4112, 0.2420,
>>> 0.2765, 0.1469, 0.1642, 0.1970, 0.2281, 0.1513),
>>>                            Ciro = c(0.1660, 0.0860, 0.0559, 0.0804,
>>> 0.1452, 0.1012, 0.0941, 0.4095, 0.0839, 0.1675, 0.1356, 0.1142, 0.2231,
>>> 0.1302, 0.0517, 0.1234, 0.0750, 0.1003, 0.0603, 0.0536, 0.0717, 0.0954,
>>> 0.1164, 0.1522, 0.1135, 0.0831, 0.1137, 0.0668),
>>>                            Outros = c(0.1316, 0.1230, 0.0961, 0.1304,
>>> 0.1659, 0.1072, 0.0690, 0.0419, 0.0606, 0.0650, 0.0700, 0.0642, 0.0631,
>>> 0.0967, 0.1405, 0.1417, 0.0873, 0.1237, 0.1739, 0.1383, 0.0707, 0.1149,
>>> 0.1241, 0.1030, 0.1922, 0.1510, 0.1318, 0.1236)
>>>                            )
>>> ### Analisando o data.table perc_validos...
>>> perc_validos; class(perc_validos); str(perc_validos); dim(perc_validos)
>>>
>>> ### Total de Votos Validos por regiao e no exterior...
>>> votos_regiao <- data.table(Regiao = c('Centro-Oeste', 'Exterior',
>>> 'Nordeste', 'Norte', 'Sudeste', 'Sul'),
>>>                            'Jair Bolsonaro' = c(4555415, 113690,
>>> 7453186, 3785038, 23915925, 9453736),
>>>                            'Fernando Haddad' = c(1642054, 19540,
>>> 14583334, 3211002, 8623232, 3262843),
>>>                            'Ciro Gomes' = c(750776, 28073, 4892961,
>>> 748170, 5425104, 1499282),
>>>                            'Demais Candidatos' = c(952142, 32078,
>>> 1894092, 982103, 6968773, 2258047)
>>>                            )
>>> ### Analisando o data.table votos_regiao...
>>> votos_regiao; class(votos_regiao); str(votos_regiao); dim(votos_regiao)
>>>
>>> ### Fazendo o cruzamento... Ou pelo menos tentando...
>>> consolida1 <- function(Candidato) {
>>>    temporario <- merge(x = perc_validos,
>>>                        y = votos_regiao[, .(Regiao,
>>>                                             Candidato)],
>>>                        by = "Regiao",
>>>                        all.x = TRUE,
>>>                        sort = TRUE)
>>>    return(temporario)
>>> }
>>> consolida1(Candidato = "Jair Bolsonaro")
>>>
>>> consolida2 <- function(Candidato) {
>>>    temporario <- merge(x = perc_validos,
>>>                        y = votos_regiao[, .(Regiao,
>>>                                             substitute(Candidato))],
>>>                        by = "Regiao",
>>>                        all.x = TRUE,
>>>                        sort = TRUE)
>>>    return(temporario)
>>> }
>>> consolida2(Candidato = "Ciro Gomes")
>>>
>>> consolida3 <- function(Candidato) {
>>>    temporario <- merge(x = perc_validos,
>>>                        y = votos_regiao[, .(Regiao,
>>>                                             eval(Candidato))],
>>>                        by = "Regiao",
>>>                        all.x = TRUE,
>>>                        sort = TRUE)
>>>    return(temporario)
>>> }
>>> consolida3(Candidato = "Fernando Haddad")
>>>
>>> _______________________________________________
>>> 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.
>>
>> _______________________________________________
>> 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.
>
> _______________________________________________
> 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/20190115/d7f5b6d3/attachment.html>


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