Separador de vírgula para números em R?

99

Existe uma função em R para exibir grandes números separados por vírgulas?

ou seja, de 1000000para 1,000,000.

TekTimmy
fonte
caso clássico de algo fácil no Excel e ridiculamente complicado no R
Nettle

Respostas:

134

Você pode tentar o formato ou prettyNum, mas ambas as funções retornam um vetor de caracteres. Eu só usaria isso para imprimir.

> prettyNum(12345.678,big.mark=",",scientific=FALSE)
[1] "12,345.68"
> format(12345.678,big.mark=",",scientific=FALSE)
[1] "12,345.68"

EDIT: Como Michael Chirico diz no comentário:

Esteja ciente de que eles têm o efeito colateral de preencher as strings impressas com espaço em branco, por exemplo:

> prettyNum(c(123,1234),big.mark=",")
[1] "  123" "1,234"

Adicione trim=TRUEa formatou preserve.width="none"a prettyNumpara evitar isso:

> prettyNum(c(123,1234),big.mark=",", preserve.width="none")
[1] "123"   "1,234"
> format(c(123,1234),big.mark=",", trim=TRUE)
[1] "123"   "1,234"
Joris Meys
fonte
5
Esteja ciente de que eles têm o efeito colateral de preencher as strings impressas com espaço em branco, por exemplo prettyNum(c(123,1234),big.mark=","):; dá " 123" "1,234". adicione trim=Ta formatou preserve.width="none"a prettyNumpara evitar isso.
MichaelChirico
@MichaelChirico Obrigado pela informação extra. Eu adicionei isso à resposta.
Joris Meys
Observe se você também define dígitos para casas decimais, se você tiver um vetor, isso pode dar errado se os números forem bem diferentes. Da ajuda "Os vetores numéricos são codificados com o número mínimo de casas decimais necessárias para exibir todos os elementos até pelo menos os dígitos dígitos significativos. No entanto, se todos os elementos tiverem zeros à direita, o número de casas decimais é reduzido até nsmall"
2015
1
Então format(c(12345678,0.001234),big.mark=",", trim=TRUE, digits = 2, scientific = FALSE)dá `" 12.345.678,0000 "" 0,0012 "para que o suficiente possa ser visto. ou seja, a formatação dos locais não é feita elemento a elemento. Me surpreendeu com tanta vontade de compartilhar isso.
micstr de
Passei algum tempo tentando descobrir o scientificque está escondido no palheiro de argumentos para format. Obrigado!
MichaelChirico
32

Veja ?format:

> format(1e6, big.mark=",", scientific=FALSE)
[1] "1,000,000" 
>   
Dirk Eddelbuettel
fonte
11

As outras respostas postadas obviamente funcionam - mas sempre usei

library(scales)    
comma_format()(1000000)
MatthewR
fonte
A função comma_format só pode lidar com inteiros.
Ven Yao,
3
Esta é uma resposta muito tarde, e pode ter sido verdade no passado que comma_formatnão lidar com números reais, mas agora você pode fazer o seguinte: scales::comma_format(digits = 12)(1000000.789)o que resulta no seguinte: "1,000,000.789".
steveb,
2
escalas :: vírgula (1000000) parece valer a pena.
Joe
3

Acho que o comentário de Joe para MatthewR oferece a melhor resposta e deve ser destacado:

Desde setembro de 2018, o scalespacote (parte do Tidyverse) faz exatamente isso:

> library(scales)

> x <- 10e5
> comma(x)

[1] "1,000,000"

O scalespacote parece funcionar muito bem ggplot2, permitindo um controle preciso de como os números são exibidos em gráficos e gráficos.

Arthur Small
fonte