Wie formatieren Sie zahlen in R, die Angabe der Anzahl der signifikanten Ziffern, sondern halten signifikante Nullen und integer-Teil?
Habe ich Schwierigkeiten mit der Formatierung von zahlen in R mit dem, was ich fühle, sind sehr sinnvolle Regeln. Was ich möchte ist, um eine Anzahl von signifikanten stellen (sagen wir 3), halten signifikante Nullen, und halten Sie auch alle Ziffern vor dem Komma, einige Beispiele (mit 3 signifikanten Ziffern):
1.23456 -> "1.23"
12.3456 -> "12.3"
123.456 -> "123"
1234.56 -> "1235"
12345.6 -> "12346"
1.50000 -> "1.50"
1.49999 -> "1.50"
Gibt es eine Funktion in R, die diese Art der Formatierung? Wenn nicht, wie könnte es getan werden?
Empfinde ich diese durchaus sinnvolle Formatierung Regeln, doch habe ich noch nicht geschafft, die Funktion zu finden, die Formate in dieser Art und Weise, in R. soweit ich gegoogelt dies ist kein Duplikat von vielen ähnlichen Fragen, wie diese
Edit:
Inspiriert durch die beiden guten Antworten, die ich zusammen eine Funktion mir der ich glaube dass Sie funktioniert für alle Fälle:
sign_digits <- function(x,d){
s <- format(x,digits=d)
if(grepl("\\.", s) && ! grepl("e", s)) {
n_sign_digits <- nchar(s) -
max( grepl("\\.", s), attr(regexpr("(^[-0.]*)", s), "match.length") )
n_zeros <- max(0, d - n_sign_digits)
s <- paste(s, paste(rep("0", n_zeros), collapse=""), sep="")
}
s
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
format(num,3)
sehr nahe kommt.Die Regeln sind nicht wirklich in sich konsistent. Sie möchten 1234.56 zum abrunden 1234, doch Sie wollen 1.4999 zu Runde bis zu 1,5.
BEARBEITEN Dies scheint mit dem deal sehr Gültiger Punkt, auf den @Henrik.
sigDigits(0.00500, 3)
Ergebnisse in0.005
während ich denke, es sollte im Ergebnis0.00500
. IO bearbeitet hast meine Frage mit einer Antwort von dir inspiriert, dass ich denke (hoffe) funktioniert für alle Fälle. 🙂Als @jlhoward Punkte, die Rundungsregel ist nicht konsistent. Daher sollten Sie verwenden eine bedingte Anweisung:
Es ist schwer zu sagen, die beabsichtigte Verwendung, aber es wäre besser, verwenden konsistente Rundung. Die Exponentialdarstellung eine option sein könnte: