Separatore virgola per i numeri in R?


99

Esiste una funzione in R per visualizzare numeri grandi separati da virgole?

cioè da 1000000a 1,000,000.


classico caso di qualcosa di facile in Excel e ridicolmente complicato in R
Nettie

Risposte:


134

Puoi provare format o prettyNum, ma entrambe le funzioni restituiscono un vettore di caratteri. Lo userei solo per la stampa.

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

EDIT: Come dice Michael Chirico nel commento:

Tieni presente che questi hanno l'effetto collaterale di riempire le stringhe stampate con uno spazio vuoto, ad esempio:

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

Aggiungi trim=TRUEa formato preserve.width="none"a prettyNumper evitare ciò:

> 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
Tieni presente che questi hanno l'effetto collaterale di riempire le stringhe stampate con uno spazio vuoto, ad esempio prettyNum(c(123,1234),big.mark=","):; dà " 123" "1,234". aggiungi trim=Ta formato preserve.width="none"per prettyNumimpedire questo.
MichaelChirico

@MichaelChirico Grazie per le informazioni extra. L'ho aggiunto alla risposta.
Joris Meys

Nota se stai impostando anche le cifre per le posizioni decimali, se hai un vettore questo può andare storto se i numeri sono abbastanza diversi. Dall'aiuto "I vettori numerici sono codificati con il numero minimo di cifre decimali necessarie per visualizzare tutti gli elementi almeno fino alle cifre cifre significative. Tuttavia, se tutti gli elementi hanno zeri finali, il numero di cifre decimali viene ridotto fino a nmall"
micstr

1
Quindi format(c(12345678,0.001234),big.mark=",", trim=TRUE, digits = 2, scientific = FALSE)dà "" 12,345,678.0000 "" 0,0012 "in modo da poter vedere abbastanza. cioè la formattazione dei luoghi non viene eseguita elemento per elemento. Mi ha preso così tanto volevo condividere questo.
micstr

Ho passato un bel po 'di tempo a cercare di trovare ciò scientificche è nascosto nel pagliaio degli argomenti format. Grazie!
MichaelChirico


11

Le altre risposte pubblicate ovviamente funzionano, ma le ho sempre usate

library(scales)    
comma_format()(1000000)

La funzione comma_format può trattare solo numeri interi.
Ven Yao

3
Questa è una risposta molto tardi, e può essere stato vero nel passato che comma_formatnon gestisce i numeri reali, ma ora si può fare quanto segue: scales::comma_format(digits = 12)(1000000.789)che si traduce in quanto segue: "1,000,000.789".
steveb

2
scale :: comma (1000000) sembra degno di nota.
Joe

3

Penso che il commento di Joe a MatthewR offra la migliore risposta e dovrebbe essere evidenziato:

A partire da settembre 2018, il scalespacchetto (parte del Tidyverse) fa esattamente questo:

> library(scales)

> x <- 10e5
> comma(x)

[1] "1,000,000"

Il scalespacchetto sembra funzionare molto bene con ggplot2, consentendo un controllo preciso di come i valori numerici vengono visualizzati nei grafici e nei grafici.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.