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)

2voto

Tim Meers Punkte 918

Für mich sieht das folgendermaßen aus

library(tutoR)
format(1.128347132904321674821, 2)

Per ein wenig Online-Hilfe .

2voto

jared Punkte 442

Wenn Sie nur eine Zahl oder eine Liste runden wollen, verwenden Sie einfach

round(data, 2)

Dann werden die Daten auf 2 Dezimalstellen gerundet.

2voto

rodrigo franco Punkte 11
library(dplyr)
# round the numbers
df <- df %>%
  mutate(across(where(is.numeric), .fns = function(x) {format(round(x, 2), nsmall = 2)}))

Hier ändere ich alle numerischen Werte so, dass sie nur 2 Dezimalstellen haben. Wenn Sie mehr Dezimalstellen benötigen

# round the numbers for k decimal places
df <- df %>%
  mutate(across(where(is.numeric), .fns = function(x) {format(round(x, k), nsmall = k)}))

Ersetzen Sie das k durch die gewünschte Anzahl von Dezimalstellen

1voto

Frederich Punkte 154

Ich habe diese Funktion geschrieben, die zwar verbesserungswürdig ist, aber in einigen Fällen gut funktioniert. Im Fall von 0,9995 zum Beispiel ergibt die Abstimmung die richtige Antwort 1,00, was falsch ist. Ich verwende diese Lösung für den Fall, dass die Zahl keine Nachkommastellen hat.

round_correct <- function(x, digits, chars = TRUE) {
  if(grepl(x = x, pattern = "\\.")) {
    y <- as.character(x)
    pos <- grep(unlist(strsplit(x = y, split = "")), pattern = "\\.", value = FALSE)
    if(chars) {
      return(substr(x = x, start = 1, stop = pos + digits))
    }
    return(
      as.numeric(substr(x = x, start = 1, stop = pos + digits))
    )
  } else {
    return(
      format(round(x, 2), nsmall = 2)
    )
  }
}

Beispiel:

round_correct(10.59648, digits = 2)
[1] "10.59"
round_correct(0.9995, digits = 2)
[1] "0.99"
round_correct(10, digits = 2)
[1] "10.00"

0voto

Captain Tyler Punkte 477

Hier ist mein Ansatz von Einheiten zu Millionen. Mit dem Parameter Ziffern kann ich die Mindestanzahl signifikanter Werte (ganze Zahlen + Dezimalzahlen) einstellen. Sie könnten die Dezimalrundung zunächst intern anpassen.

number <-function(number){
  result <- if_else(
    abs(number) < 1000000,
    format(
      number, digits = 3,
      big.mark = ".",
      decimal.mark = ","
    ),
    paste0(
      format(
        number/1000000,
        digits = 3,
        drop0trailing = TRUE,
        big.mark = ".",
        decimal.mark = ","
      ),
      "MM"
    )
  )
  # result <- paste0("$", result)
  return(result)
}

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