[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
Ter Jan 15 08:00:14 -02 2019


*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.
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20190115/1ae6ea0f/attachment.html>


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