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

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

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

R-br mailing list
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.

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
[hidden email]
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.
Reply | Threaded
Open this post in threaded view
|

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

R-br mailing list
Bom dia Bruno

Me parece que suas 3 funções são idênticas.

Passa a variável “Ciro Gomes” como parâmetro para a consolida1(). Deve ter algum erro de digitação na consolida2().


daniel



Daniel Tiezzi, MD, PhD
Professor Associado
Departamento de Ginecologia e Obstetrícia
Setor de Mastologia e Oncologia Ginecológica
Faculdade de Medicina de Ribeirão Preto - USP
Tel.: 16 3602-2488
[hidden email]



On 11 Jan 2019, at 09:16, Bruno César Pasquini por (R-br) <[hidden email]> wrote:

####### 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
[hidden email]
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.
Reply | Threaded
Open this post in threaded view
|

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

R-br mailing list
In reply to this post by R-br mailing list
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) <[hidden email]> 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.

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
[hidden email]
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
[hidden email]
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.
Reply | Threaded
Open this post in threaded view
|

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

R-br mailing list
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) <[hidden email]> 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) <[hidden email]> 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.

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
[hidden email]
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
[hidden email]
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
[hidden email]
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.
Reply | Threaded
Open this post in threaded view
|

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

R-br mailing list
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) <[hidden email]> 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) <[hidden email]> 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) <[hidden email]> 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.

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
[hidden email]
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
[hidden email]
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
[hidden email]
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
[hidden email]
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.
Reply | Threaded
Open this post in threaded view
|

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

R-br mailing list
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 <[hidden email]> 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) <[hidden email]> 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) <[hidden email]> 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) <[hidden email]> 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.

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
[hidden email]
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
[hidden email]
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
[hidden email]
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
[hidden email]
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.
Reply | Threaded
Open this post in threaded view
|

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

R-br mailing list
Bruno, 

Com as provisões de adequação do exemplo e demais considerações, acho obtive que a resposta que você deseja fazendo o seguinte:

1) na criação das data.tables perc_validos e votos_regiao eu coloquei que a chave para ambas era a região com o parâmetro Key="Regiao".

2) usando a seguinte chamada obtive o seguinte (ignore o fato que meu R é parametrizado para português e a vírgula usada como marca de raíz):

> merge(perc_validos, votos_regiao[,Regiao,"Demais Candidatos"], all.x=T, sort=T) # isto aqui é tudo uma linha só!!
          Regiao              Estado Bolsonaro Haddad   Ciro Outros
 1: Centro-Oeste    Distrito Federal    0,5837 0,1187 0,1660 0,1316
 2: Centro-Oeste               Goias    0,5724 0,2186 0,0860 0,1230
 3: Centro-Oeste         Mato Grosso    0,6004 0,2476 0,0559 0,0961
 4: Centro-Oeste  Mato Grosso do Sul    0,5506 0,2387 0,0804 0,1304
 5:     Exterior                        0,5879 0,1010 0,1452 0,1659
 6:     Nordeste             Alagoas    0,3440 0,4475 0,1012 0,1072
 7:     Nordeste               Bahia    0,2341 0,6028 0,0941 0,0690
 8:     Nordeste               Ceara    0,2174 0,3312 0,4095 0,0419
 9:     Nordeste            Maranhao    0,2428 0,6126 0,0839 0,0606
10:     Nordeste             Paraiba    0,3130 0,4546 0,1675 0,0650
11:     Nordeste          Pernambuco    0,3057 0,4887 0,1356 0,0700
12:     Nordeste               Piaui    0,1876 0,6340 0,1142 0,0642
13:     Nordeste Rio Grande do Norte    0,3021 0,4119 0,2231 0,0631
14:     Nordeste             Sergipe    0,2721 0,5009 0,1302 0,0967
15:        Norte                Acre    0,6224 0,1853 0,0517 0,1405
16:        Norte               Amapa    0,4074 0,3277 0,1234 0,1417
17:        Norte            Amazonas    0,4348 0,4030 0,0750 0,0873
18:        Norte                Para    0,3619 0,4139 0,1003 0,1237
19:        Norte            Rondonia    0,6224 0,2036 0,0603 0,1739
20:        Norte             Roraima    0,6297 0,1785 0,0536 0,1383
21:        Norte           Tocantins    0,4464 0,4112 0,0717 0,0707
22:      Sudeste      Espirito Santo    0,5476 0,2420 0,0954 0,1149
23:      Sudeste        Minas Gerais    0,4831 0,2765 0,1164 0,1241
24:      Sudeste      Rio de Janeiro    0,5979 0,1469 0,1522 0,1030
25:      Sudeste           Sao Paulo    0,5300 0,1642 0,1135 0,1922
26:          Sul              Parana    0,5689 0,1970 0,0831 0,1510
27:          Sul   Rio Grande do Sul    0,5263 0,2281 0,1137 0,1318
28:          Sul      Santa Catarina    0,6582 0,1513 0,0668 0,1236
          Regiao              Estado Bolsonaro Haddad   Ciro Outros
    Demais Candidatos
 1:            952142
 2:            952142
 3:            952142
 4:            952142
 5:             32078
 6:           1894092
 7:           1894092
 8:           1894092
 9:           1894092
10:           1894092
11:           1894092
12:           1894092
13:           1894092
14:           1894092
15:            982103
16:            982103
17:            982103
18:            982103
19:            982103
20:            982103
21:            982103
22:           6968773
23:           6968773
24:           6968773
25:           6968773
26:           2258047
27:           2258047
28:           2258047
    Demais Candidatos

HTH
--
Cesar Rabak


On Fri, Jan 18, 2019 at 9:19 AM Bruno César Pasquini por (R-br) <[hidden email]> wrote:
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 <[hidden email]> 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) <[hidden email]> 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) <[hidden email]> 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) <[hidden email]> 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.

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
[hidden email]
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
[hidden email]
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
[hidden email]
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
[hidden email]
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
[hidden email]
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.