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

Bruno César Pasquini bruno.pasquini em gmail.com
Sex Jan 18 09:18:13 -02 2019


*César*,

Bom dia.

Eu reconheço que, sob o aspecto de banco de dados, não faz sentido ter a
mescla de proporções com totais absolutos de votos válidos. E que também
acabo duplicando os valores no cruzamento. Meu exemplo não foi bom neste
sentido.

Ainda assim, a dúvida continua sendo como fazer a função reconhecer a
variável que eu gostaria de levar para o cruzamento além da variável chave
para o cruzamento (neste caso a variavel *Regiao*).

Assim, ignorando estes problemas de bancos de dados, o que preciso fazer
para passar o parâmetro da função de forma correta? Você(s) pode(m) me
apontar o que estou fazendo de errado nas versões da função *consolida*?

Grato mais uma vez pela sua atenção,

Bruno César Pasquini
Estatístico


Em ter, 15 de jan de 2019 às 22:31, Cesar Rabak <cesar.rabak em gmail.com>
escreveu:

> 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/20190118/4a880d9e/attachment.html>


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