[R-br] Ajuda com a passagem incorreta de variável string para uma função do R
Cesar Rabak
cesar.rabak em gmail.com
Sex Jan 18 17:09:37 -02 2019
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) <
r-br em listas.c3sl.ufpr.br> 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 <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.
>>
>> _______________________________________________
> 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/0e71389e/attachment.html>
Mais detalhes sobre a lista de discussão R-br