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@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.

Responder a