Séparateur virgule pour les nombres dans R?

99

Y a-t-il une fonction dans R pour afficher de grands nombres séparés par des virgules?

c'est-à-dire de 1000000à 1,000,000.

TekTimmy
la source
cas classique de quelque chose de facile dans Excel et de ridiculement compliqué dans R
Nettle

Réponses:

134

Vous pouvez essayer format ou prettyNum, mais les deux fonctions renvoient un vecteur de caractères. Je n'utiliserais cela que pour l'impression.

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

EDIT: Comme le dit Michael Chirico dans le commentaire:

Sachez que ceux-ci ont pour effet secondaire de remplir les chaînes imprimées d'un espace vide, par exemple:

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

Ajouter trim=TRUEà formatou preserve.width="none"à prettyNumpour empêcher cela:

> 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
la source
5
Sachez que ceux-ci ont pour effet secondaire de remplir les chaînes imprimées avec un espace vide, par exemple prettyNum(c(123,1234),big.mark=","):; donne " 123" "1,234". ajouter trim=Tà formatou preserve.width="none"à en prettyNumempêcher.
MichaelChirico
@MichaelChirico Merci pour les informations supplémentaires. Je l'ai ajouté à la réponse.
Joris Meys
Notez que si vous définissez également des chiffres pour les décimales, si vous avez un vecteur, cela peut mal tourner si les nombres sont assez différents. From help "Les vecteurs numériques sont codés avec le nombre minimum de décimales nécessaires pour afficher tous les éléments au moins aux chiffres des chiffres significatifs. Cependant, si tous les éléments ont alors des zéros à la fin, le nombre de décimales est réduit jusqu'à nsmall"
micstr
1
format(c(12345678,0.001234),big.mark=",", trim=TRUE, digits = 2, scientific = FALSE)Donne donc "" 12,345,678,0000 "" 0,0012 "pour que vous puissiez en voir suffisamment. c'est-à-dire que le formatage des lieux ne se fait pas élément par élément. M'a pris tellement envie de partager ça.
micstr
J'ai passé un certain temps à essayer de trouver scientificce qui est caché dans la botte de foin d'arguments format. Merci!
MichaelChirico
32

Voir ?format:

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

Les autres réponses publiées fonctionnent évidemment - mais j'ai toujours utilisé

library(scales)    
comma_format()(1000000)
MatthewR
la source
La fonction comma_format ne peut traiter que des entiers.
Ven Yao
3
Ceci est une réponse très tard, et il est peut-être vrai dans le passé qui comma_formatne gère pas les nombres réels , mais maintenant , vous pouvez faire ce qui suit: scales::comma_format(digits = 12)(1000000.789)qui donne le résultat suivant: "1,000,000.789".
steveb
2
scale :: comma (1000000) semble valoir la peine d'être mentionné.
Joe le
3

Je pense que le commentaire de Joe à MatthewR offre la meilleure réponse et devrait être souligné:

Depuis septembre 2018, le scalespackage (qui fait partie du Tidyverse) fait exactement ceci:

> library(scales)

> x <- 10e5
> comma(x)

[1] "1,000,000"

Le scalespackage semble très bien jouer avec ggplot2, permettant un contrôle précis de la façon dont les valeurs numériques sont affichées dans les graphiques et les graphiques.

Arthur petit
la source