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@uol.com.br>
Para: r-br@listas.c3sl.ufpr.br; Ivan Bezerra Allaman <ivanalaman@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@listas.c3sl.ufpr.brhttps://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-brLeia o guia de postagem (
http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.