¿Separador de comas para números en R?

99

¿Existe una función en R para mostrar números grandes separados por comas?

es decir, de 1000000a 1,000,000.

TekTimmy
fuente
caso clásico de algo fácil en Excel y ridículamente complicado en R
Nettle

Respuestas:

134

Puede probar con formato o prettyNum, pero ambas funciones devuelven un vector de caracteres. Solo lo usaría para imprimir.

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

EDITAR: Como dice Michael Chirico en el comentario:

Tenga en cuenta que estos tienen el efecto secundario de rellenar las cadenas impresas con espacios en blanco, por ejemplo:

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

Añadir trim=TRUEa formato preserve.width="none"a prettyNumprevenir esto:

> 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
fuente
5
Tenga en cuenta que estos tienen el efecto secundario de rellenar las cadenas impresas con espacios en blanco, por ejemplo prettyNum(c(123,1234),big.mark=","):; da " 123" "1,234". añadir trim=Ta formato preserve.width="none"para prettyNumprevenir esto.
MichaelChirico
@MichaelChirico Gracias por la información adicional. Lo agregué a la respuesta.
Joris Meys
Tenga en cuenta que si también está configurando dígitos para lugares decimales, si tiene un vector, esto puede salir mal si los números son bastante diferentes. De la ayuda "Los vectores numéricos se codifican con la cantidad mínima de lugares decimales necesarios para mostrar todos los elementos con al menos los dígitos dígitos significativos. Sin embargo, si todos los elementos tienen ceros al final, el número de lugares decimales se reduce hasta nsmall"
micstr
1
Entonces format(c(12345678,0.001234),big.mark=",", trim=TRUE, digits = 2, scientific = FALSE)da "" 12,345,678.0000 "" 0.0012 "para que se pueda ver lo suficiente. es decir, el formato de los lugares no se realiza elemento por elemento. Me sorprendió, así que quería compartir esto.
micstr
Pasé bastante tiempo tratando de encontrar scientificcuál está escondido en el pajar de argumentos format. ¡Gracias!
MichaelChirico
32

Ver ?format:

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

Las otras respuestas publicadas obviamente funcionan, pero siempre he usado

library(scales)    
comma_format()(1000000)
MatthewR
fuente
La función comma_format solo puede tratar con números enteros.
Ven Yao
3
Esta es una respuesta muy tarde, y que puede haber sido cierto en el pasado que comma_formatno manejan números reales, pero ahora se puede hacer lo siguiente: scales::comma_format(digits = 12)(1000000.789)que se traduce en lo siguiente: "1,000,000.789".
steveb
2
scale :: coma (1000000) parece digno de mención.
Joe
3

Creo que el comentario de Joe a MatthewR ofrece la mejor respuesta y debe destacarse:

A partir de septiembre de 2018, el scalespaquete (parte del Tidyverse) hace exactamente esto:

> library(scales)

> x <- 10e5
> comma(x)

[1] "1,000,000"

El scalespaquete parece funcionar muy bien ggplot2, lo que permite un control preciso de cómo se muestran los números en gráficos y gráficos.

Arthur pequeño
fuente