2015-08-08 3 views
5

I einen Vektor von numerischen in R haben:berechnen die Anzahl der Stellen in einem numerischen Vektor in R

c(0.9, 0.81) 

und ich möchte die Anzahl der Stellen für jedes Element in diesem Vektor extrahieren. Der Befehl wird in diesem Fall 1 und 2 zurückgeben, da die Ziffern 9 und 81 sind. Gibt es einen bequemen Weg, es zu tun? Wenn das Ergebnis 1 ist, wie kann ich dann auf zwei Ziffern erweitern? Zum Beispiel würde ich ein zurück Vektor wie

sein
c(0.90, 0.81) 
+1

Try 'Format (v1, nKleines = 2)' für den Druck oder 'sprintf' Do Sie möchten es als 'numerische' Klasse zurückgeben? Vielleicht 'runde (v1,2)' – akrun

+0

Geben Sie "v" in der Konsole und Sie erhalten "0,90" und "0,81". Der Vektor druckt automatisch alle Elemente mit der höchsten Anzahl von Ziffern einer beliebigen Zahl im Vektor. –

Antwort

3
x <- c(0.9,0.81,32.52,0); 
nchar(sub('^0+','',sub('\\.','',x))); 
## [1] 1 2 4 0 

Diese Streifen den Dezimalpunkt verwenden, dann werden alle Streifen führende Nullen, und schließlich verwendet die String-Länge als ein indirektes Mittel zur Berechnung der Anzahl der signifikanten Ziffern. Es gibt natürlich Null für eine Eingabe von Null zurück, aber Sie können einen Ausdruck if verwenden, um explizit für diesen Fall zu testen und eins stattdessen zurückzugeben, wenn Sie bevorzugen.

Wie akrun erwähnt, für das Drucken mit zwei Stellen hinter dem Komma: ('%. 2f', v1)

sprintf('%.2f',x); 
## [1] "0.90" "0.81" "32.52" "0.00" 
6

Um die Ziffern nach dem Komma zu zählen, können Sie nchar

sapply(v, nchar) - 2 # -2 for "." and leading 0 
# 1 2 
+3

Oder 'nchar (sub ('. * \\.', '', V1))' BTW, 'nchar (v1) -2' sollte auch funktionieren – akrun

+3

Sie müssen möglicherweise erwähnen, dass dies nicht allgemein ist. Zum Beispiel '32.52' – akrun

+0

@akrun ja, wie akrun sagt – jenesaisquoi

Verwandte Themen