2009-10-17 5 views
38

Je génère une trame de données en HTML via xtable. Je veux ajouter des virgules aux nombres dans quelques colonnes de la table. Je me suis dit avant de faire mon propre hack que je verrais s'il y a un moyen de le faire.Ajouter des virgules dans le nombre pour la sortie

Répondre

47

Vous voudrez peut-être envisager de transformer la colonne en utilisant formatC

> formatC(1:10 * 100000, format="d", big.mark=",") 
[1] "100,000" "200,000" "300,000" "400,000" "500,000" "600,000" 
[7] "700,000" "800,000" "900,000" "1,000,000" 
12

Un grand merci à Jonathan Chang pour sa réponse. formatC semble être une fonction extrêmement utile. Cela m'a inspiré à lire la documentation, où j'ai trouvé prettyNum, qui s'est avéré être une solution assez élégante à un problème similaire que j'avais. Voici un exemple minimum viable de ce que j'ai fait pour ajouter des virgules aux nombres dans un bloc de données nommé enrollment.summary.

xtable(prettyNum(enrollment.summary,big.mark=","))

+1

'formatC' est un [function] (https://stat.ethz.ch/R-manual/R-devel/library/base/html/formatc.html) dans le paquet 'base', pas un paquet lui-même. À l'avenir, veuillez inclure des exemples reproductibles et afficher le comportement dans votre réponse. Par exemple, envisagez de remplacer 'enrollment.summary' par' mtcars': 'prettyNum (mtcars, big.mark =", ")' renvoie une matrice de caractères où les colonnes correspondent aux colonnes du fichier "mtcars' data.frame, et les nombres sont imprimé. –

+2

Notez également que 'prettyNum' remplit votre sortie avec un espace vide (potentiellement indésirable): prettyNum (c (123,1234), big.mark =", "); donne "123" "1,234". Ajoutez preserve.width = "none" pour éviter cela. – MichaelChirico

7

Vous pouvez également essayer d'utiliser l'argument auj 'format.args'

## Demonstration of additional formatC() arguments. 
    print(fm1.table, format.args = list(big.mark = "'", decimal.mark = ",")) 

d'ici

https://cran.rstudio.com/web/packages/xtable/xtable.pdf

+0

Ceci est très utile, car il permet à l'utilisateur de conserver le format original des colonnes. – dayne

2

pour mettre en forme des résumés de dplyr, voici boilerplate code:

df %>% summarise(mu=mean(big_values), min=min(big_values), max=max(big_values)) %>% mutate_each(funs(prettyNum(., big.mark=",")))

2

Voici une réponse tardive, mais vous pouvez également utiliser scales::comma_format comme suit:

library(scales) 
values <- c(1000000.789, 8888.23) 
comma_format(digits = 12)(values) 
## [1] "1,000,000.789" "8,888.230" 

Pour juste des valeurs entières, vous pouvez simplement utiliser des virgules:

int_vals <- c(1234, 5678) 
comma(int_vals) 
## [1] "1,234" "5,678" 
Questions connexes