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.


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"

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


11

As outras respostas postadas obviamente funcionam - mas sempre usei

library(scales)    
comma_format()(1000000)

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.