365 Stimmen

Formatierung von Dezimalstellen in R

Ich habe eine Zahl, z.B. 1,128347132904321674821, die ich bei der Ausgabe auf dem Bildschirm (oder beim Schreiben in eine Datei) mit nur zwei Dezimalstellen anzeigen möchte. Wie kann man das machen?

x <- 1.128347132904321674821

EDITです:

Die Verwendung von:

options(digits=2)

Es wurde als mögliche Antwort vorgeschlagen. Gibt es eine Möglichkeit, dies in einem Skript zur einmaligen Verwendung anzugeben? Wenn ich es zu meinem Skript hinzufüge, scheint es nichts anderes zu tun, und ich bin nicht daran interessiert, jede Zahl erneut einzugeben, um sie zu formatieren (ich automatisiere einen sehr großen Bericht).

--

Antwort: round(x, digits=2)

523voto

Jeromy Anglim Punkte 32121

Hintergrund: Einige der auf dieser Seite vorgeschlagenen Antworten (z.B., signif , options(digits=...) ) garantieren nicht, dass eine bestimmte Anzahl von Nachkommastellen für eine beliebige Zahl angezeigt wird. Ich nehme an, dass dies ein Designmerkmal von R ist, wobei die gute wissenschaftliche Praxis die Anzeige einer bestimmten Anzahl von Ziffern auf der Grundlage der Prinzipien von " aussagekräftige Zahlen ". Doch in vielen Bereichen (z.B., APA-Stil (z. B. in Geschäftsberichten) schreiben die Formatierungsvorschriften vor, dass eine bestimmte Anzahl von Dezimalstellen angezeigt werden muss. Dies geschieht oft aus Gründen der Konsistenz und Standardisierung und nicht, weil es um signifikante Zahlen geht.

Lösung :

Der folgende Code zeigt genau zwei Dezimalstellen für die Zahl x .

format(round(x, 2), nsmall = 2)

Zum Beispiel:

format(round(1.20, 2), nsmall = 2)
# [1] "1.20"
format(round(1, 2), nsmall = 2)
# [1] "1.00"
format(round(1.1234, 2), nsmall = 2)
# [1] "1.12"

Eine allgemeinere Funktion lautet wie folgt, wobei x ist die Zahl und k ist die Anzahl der anzuzeigenden Dezimalstellen. trimws entfernt alle führenden Leerzeichen, was bei einem Vektor von Zahlen nützlich sein kann.

specify_decimal <- function(x, k) trimws(format(round(x, k), nsmall=k))

Z.B.,

specify_decimal(1234, 5)
# [1] "1234.00000"
specify_decimal(0.1234, 5)
# [1] "0.12340"

Diskussion von Alternativen:

T formatC Antworten y sprintf-Antworten recht gut funktionieren. Sie zeigen jedoch in einigen Fällen negative Nullen an, was unerwünscht sein kann. D.h.,

formatC(c(-0.001), digits = 2, format = "f")
# [1] "-0.00"
sprintf(-0.001, fmt = '%#.2f')
# [1] "-0.00"

Eine mögliche Umgehung dieses Problems ist die folgende:

formatC(as.numeric(as.character(round(-.001, 2))), digits = 2, format = "f")
# [1] "0.00"

53voto

SORIF HOSSAIN Punkte 1131

Sie können eine Zahl formatieren, zum Beispiel x bis zu den gewünschten Dezimalstellen. Hier x ist eine Zahl mit vielen Dezimalstellen. Angenommen, wir möchten bis zu 8 Dezimalstellen dieser Zahl anzeigen:

x = 1111111234.6547389758965789345
y = formatC(x, digits = 8, format = "f")
# [1] "1111111234.65473890"

Aquí format="f" gibt Gleitkommazahlen mit den üblichen Dezimalstellen an, z. B. xxx.xxx, und digits gibt die Anzahl der Ziffern an. Wenn Sie dagegen eine ganze Zahl anzeigen lassen wollen, verwenden Sie format="d" (ähnlich wie sprintf ).

37voto

Kun Ren Punkte 4377

Sie können mein Paket ausprobieren formatierbar .

> # devtools::install_github("renkun-ken/formattable")
> library(formattable)
> x <- formattable(1.128347132904321674821, digits = 2, format = "f")
> x
[1] 1.13

Das Gute daran ist, x ist immer noch ein numerischer Vektor, und Sie können weitere Berechnungen mit der gleichen Formatierung durchführen.

> x + 1
[1] 2.13

Noch besser, die Ziffern gehen nicht verloren, Sie können jederzeit mit mehr Ziffern neu formatieren :)

> formattable(x, digits = 6, format = "f")
[1] 1.128347

33voto

Mark Adamson Punkte 828

Für 2 Dezimalstellen unter der Annahme, dass Sie Nullen am Ende beibehalten wollen

sprintf(5.5, fmt = '%#.2f')

das ergibt

[1] "5.50"

Wie @mpag weiter unten erwähnt, scheint R mit dieser und der Rundungsmethode manchmal unerwartete Werte zu liefern, z. B. sprintf(5.5550, fmt='%#.2f') ergibt 5.55 und nicht 5.56

12voto

PaulHurleyuk Punkte 7789

Wenn Sie signifikante Ziffern gegenüber festen Ziffern bevorzugen, dann ist die Vorzeichen könnte nützlich sein:

> signif(1.12345, digits = 3)
[1] 1.12
> signif(12.12345, digits = 3)
[1] 12.1
> signif(12345.12345, digits = 3)
[1] 12300

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X