[R-br] arredondar soma para 100%

Henrique Dallazuanna wwwhsd em gmail.com
Quarta Fevereiro 1 23:06:41 BRST 2012


Alexandre,

Tente assim

diff(c(0, round(cumsum(p), 3))) * 100

2012/1/29 Alexandro (Yahoo) <vl.alexandro em yahoo.com.br>

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



-- 
Henrique Dallazuanna
Curitiba-Paraná-Brasil
25° 25' 40" S 49° 16' 22" O
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20120201/eca64ccc/attachment.html>


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