<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">PessoALL, bom dia!<br><br>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.<br><br>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.<br><br>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.</div><div dir="ltr">
<div dir="ltr">Fonte: <a href="https://pt.wikipedia.org/wiki/Resultados_da_eleição_presidencial_no_Brasil_em_2018#Primeiro_turno_3" target="_blank">https://pt.wikipedia.org/wiki/Resultados_da_eleição_presidencial_no_Brasil_em_2018#Primeiro_turno_3</a></div><div dir="ltr"><br></div>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...</div><div dir="ltr"><br></div><div dir="ltr">Especificamente, eu não consigo fazer a função "<b>consolida</b>" (na verdade as versões 1, 2 e 3 desta função) interprete(m) o parâmetro "<b>Candidato</b>" corretamente.<br>Eu tento usar o parâmetro sozinho e com as funções "<b>substitute</b>" e "<b>eval</b>", 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"...<br><br>Vocês podem me ajudar a entender o que estou fazendo de errado?<br><br>Muito grato pela atenção de cada um(a),<br>Bruno César Pasquini<br>Estatístico</div><div dir="ltr"><br></div><span style="font-family:tahoma,sans-serif"></span></div><span style="font-family:tahoma,sans-serif">####### Codigo Reprodutivel...<br><br>library(data.table)<br><br>### Percentual de Votos Validos nos estados e no exterior...<br>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'),<br>                           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'),<br>                           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),<br>                           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),<br>                           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),<br>                           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)<br>                           )<br>### Analisando o data.table perc_validos...<br>perc_validos; class(perc_validos); str(perc_validos); dim(perc_validos)<br><br>### Total de Votos Validos por regiao e no exterior...<br>votos_regiao <- data.table(Regiao = c('Centro-Oeste', 'Exterior', 'Nordeste', 'Norte', 'Sudeste', 'Sul'),<br>                           'Jair Bolsonaro' = c(4555415, 113690, 7453186, 3785038, 23915925, 9453736),<br>                           'Fernando Haddad' = c(1642054, 19540, 14583334, 3211002, 8623232, 3262843),<br>                           'Ciro Gomes' = c(750776, 28073, 4892961, 748170, 5425104, 1499282),<br>                           'Demais Candidatos' = c(952142, 32078, 1894092, 982103, 6968773, 2258047)<br>                           )<br>### Analisando o data.table votos_regiao...<br>votos_regiao; class(votos_regiao); str(votos_regiao); dim(votos_regiao)<br><br>### Fazendo o cruzamento... Ou pelo menos tentando...<br>consolida1 <- function(Candidato) {<br>   temporario <- merge(x = perc_validos,<br>                       y = votos_regiao[, .(Regiao,<br>                                            Candidato)],<br>                       by = "Regiao",<br>                       all.x = TRUE,<br>                       sort = TRUE)<br>   return(temporario)<br>}<br>consolida1(Candidato = "Jair Bolsonaro")<br><br>consolida2 <- function(Candidato) {<br>   temporario <- merge(x = perc_validos,<br>                       y = votos_regiao[, .(Regiao,<br>                                            substitute(Candidato))],<br>                       by = "Regiao",<br>                       all.x = TRUE,<br>                       sort = TRUE)<br>   return(temporario)<br>}<br>consolida2(Candidato = "Ciro Gomes")<br><br>consolida3 <- function(Candidato) {<br>   temporario <- merge(x = perc_validos,<br>                       y = votos_regiao[, .(Regiao,<br>                                            eval(Candidato))],<br>                       by = "Regiao",<br>                       all.x = TRUE,<br>                       sort = TRUE)<br>   return(temporario)<br>}<br>consolida3(Candidato = "Fernando Haddad")</span></div><div dir="ltr"><br></div></div>