[R-br] arredondar soma para 100%

Alexandro (Yahoo) vl.alexandro em yahoo.com.br
Domingo Janeiro 29 15:00:24 BRST 2012


Mauro,
usando o comando
graf=barplot(tabela,axes=FALSE,ylim=c(0,100));text(graf,porc,format(porc),pos=1);text(graf,porc,"            %",pos=1);text(graf,porc,format(tabela))

a soma era 100,1%

depois com a grande ajuda do Benilton, substituindo porc por pFix
graf=barplot(tabela,axes=FALSE,ylim=c(0,100));text(graf,pFix,format(pFix),pos=1);text(graf,pFix,"            %",pos=1);text(graf,pFix,format(tabela))

a soma ficou 100% > perfeito !
A lástima é que não vale para todo caso !
Daí tem que se fazer o que o Leonard disse:
cada gráfico ou tabela, deve deslocar alguém para fazer os
totais fecharem com as somas. 


Boa semana!
Respeitosamente,
Alex




>________________________________
> De: Mauro Sznelwar <sznelwar em uol.com.br>
>Para: r-br em listas.c3sl.ufpr.br; Ivan Bezerra Allaman <ivanalaman em yahoo.com.br> 
>Enviadas: Domingo, 29 de Janeiro de 2012 13:31
>Assunto: Re: [R-br] arredondar soma para 100%
> 
>
> 
>Rodei estes comandos com os anteriores e não 
vi diferença!
>a=rep("a",9);b=rep("b",30);c=rep("c",5)
>dados=c(a,b,c);tabela=table(dados)
>#porc=round(table(dados)/length(dados)*100,digits=1)
>pNaive = 
round(prop.table(tabela), digits=3)
>pFix = round(pNaive/sum(pNaive)*100, 
digits=1)
>graf=barplot(tabela,axes=FALSE,ylim=c(0,100));text(graf,porc,format(porc),pos=1);text(graf,porc," 
          
 %",pos=1);text(graf,porc,format(tabela))
>title(main = 
"Quantidade e Porcentagem das Categorias :a,b,c")
>
>
>
>Alex, o que vc esta' observado e' a acumulacao de erros 
de
>representacao, devido ao arredondamento. Uma forma de corrigir isso 
eh
>normalizar as proporcoes. Usando os dados aos quais voce 
referiu-se
>acima:
>
>pNaive = round(prop.table(tabela), digits=3)
>pFix 
= round(pNaive/sum(pNaive)*100, digits=1)
>
>Entretanto, note que essa 
solucao (como representada acima) pode nao
>ser geral e exigir algumas 
repeticoes (afinal, a todo momento voce
>esta' tentando representar numeros 
com trocentas casas decimais num
>grau de granularidade bem 
maior).
>
>Ivan, sobre a representacao de 9/44... Eh 0.20454545... 
(periodica no
>45). Ou, usando a escala acima: 20.4545454545.... Arredondar 
para a
>i-esima casa decimal (pelo menos conforme eu aprendi, que 
eh
>concordante com a implementacao do R) consiste em truncar na 
casa
>(i+1), testar se aquele digito e' maior ou igual a 5 e, se 
sim,
>incrementar a casa i em 1 unidade. Dito isso:
>
>- Arredondar para 1 
digito: Segundo digito eh 5, entao incrementa o
>primeiro: 20.5
>- 
Arredondar para 2 digitos: Terceiro digito eh 4, entao mantem o segundo: 
20.45
>- Arredondar para 3 digitos: Quarto digito eh 5, entao incrementa 
o
>terceiro: 20.455
>
>Pode ser que a estrategia a qual voce esteja se 
referindo seja diferente?
>
>b
>.
>_______________________________________________
>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/20120129/11489dc8/attachment.html>


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