Komma-Trennzeichen für Zahlen in R?


98

Gibt es in R eine Funktion zum Anzeigen großer Zahlen, die durch Kommas getrennt sind?

dh von 1000000bis 1,000,000.


klassischer Fall von etwas Leichtem in Excel und lächerlich Kompliziertem in R
Nettle

Antworten:


132

Sie können entweder Format oder PrettyNum ausprobieren, aber beide Funktionen geben einen Vektor von Zeichen zurück. Ich würde das nur zum Drucken verwenden.

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

EDIT: Wie Michael Chirico im Kommentar sagt:

Beachten Sie, dass diese den Nebeneffekt haben, dass die gedruckten Zeichenfolgen mit Leerzeichen aufgefüllt werden, zum Beispiel:

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

In trim=TRUEzu formatoder preserve.width="none"zu prettyNumverhindern dies:

> 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
Beachten Sie, dass diese den Nebeneffekt haben, dass die gedruckten Zeichenfolgen mit Leerzeichen aufgefüllt werden, zum Beispiel : prettyNum(c(123,1234),big.mark=","); gibt " 123" "1,234". hinzufügen trim=Tzu formatoder preserve.width="none"zu prettyNumzu diesem zu verhindern.
MichaelChirico

@ MichaelChirico Danke für die zusätzlichen Informationen. Ich habe es der Antwort hinzugefügt.
Joris Meys

Beachten Sie, wenn Sie auch Ziffern für Dezimalstellen einstellen. Wenn Sie einen Vektor haben, kann dies schief gehen, wenn die Zahlen sehr unterschiedlich sind. Aus der Hilfe "Numerische Vektoren werden mit der minimalen Anzahl von Dezimalstellen codiert, die erforderlich sind, um alle Elemente auf mindestens die Stellen mit signifikanten Stellen anzuzeigen. Wenn jedoch alle Elemente nachgestellte Nullen haben, wird die Anzahl der Dezimalstellen bis nsmall reduziert"
Micstr

1
So format(c(12345678,0.001234),big.mark=",", trim=TRUE, digits = 2, scientific = FALSE)ergibt sich "12.345.678.0000" "0.0012", so dass genug gesehen werden kann. Das heißt, die Formatierung der Orte erfolgt nicht Element für Element. Hat mich erwischt und wollte das teilen.
Micstr

Verbrachte einige Zeit damit, herauszufinden, scientificwas im Heuhaufen der Argumente verborgen ist format. Vielen Dank!
MichaelChirico


11

Die anderen Antworten funktionieren natürlich - aber ich habe sie immer benutzt

library(scales)    
comma_format()(1000000)

Die Funktion comma_format kann nur Ganzzahlen verarbeiten.
Ven Yao

3
Dies ist eine sehr späte Antwort, und es mag in der Vergangenheit so gewesen sein, dass comma_formatkeine reellen Zahlen verarbeitet wurden, aber jetzt können Sie Folgendes tun: Dies scales::comma_format(digits = 12)(1000000.789)führt zu Folgendem : "1,000,000.789".
Steveb

2
scale :: comma (1000000) scheint eine Erwähnung wert zu sein.
Joe

3

Ich denke, Joes Kommentar zu MatthewR bietet die beste Antwort und sollte hervorgehoben werden:

Ab September 2018 macht das scalesPaket (Teil des Tidyverse) genau dies:

> library(scales)

> x <- 10e5
> comma(x)

[1] "1,000,000"

Das scalesPaket scheint sehr gut zu spielen ggplot2und ermöglicht eine genaue Kontrolle darüber, wie Zahlen in Plots und Diagrammen angezeigt werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.