2015-08-08 11 views
5

Ho un vettore di numerico R:calcolare il numero di cifre in un vettore numerico nel R

c(0.9, 0.81) 

e vorrei estrarre il numero di cifre per ogni elemento in questo vettore. Il comando restituirà, in questo caso, 1 e 2 poiché le cifre sono 9 e 81. C'è un modo conveniente per farlo? Inoltre, se il risultato è 1, come posso espandere a due cifre? Ad esempio, mi piacerebbe un vettore tornato a essere

c(0.90, 0.81) 
+1

Prova 'formato (v1, nsmall = 2)' per la stampa o 'sprintf' Do vuoi restituirlo come classe 'numerica'? Forse 'round (v1,2)' – akrun

+0

Digita 'v' nella console e otterrai' 0.90' e '0.81'. Il vettore stampa automaticamente tutti gli elementi con il numero più alto di cifre di qualsiasi numero nel vettore. –

risposta

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

Questo elimina la virgola decimale, quindi strisce tutto zeri iniziali e infine utilizza la lunghezza della stringa come mezzo indiretto per calcolare il numero di cifre significative. Restituisce naturalmente zero per un input zero, ma è possibile utilizzare un'espressione if per verificare esplicitamente il caso e restituirne uno, se preferisci.

Come akrun menzionato, per la stampa con due cifre dopo la virgola: ('% 2f', v1)

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

a contare le cifre dopo la virgola, è possibile utilizzare nchar

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

Oppure 'nchar (sub ('. * \\.', '', V1))' BTW, 'nchar (v1) -2' dovrebbe funzionare anche – akrun

+3

Potrebbe essere necessario ricordare che questo non è generale. Per esempio '32.52' – akrun

+0

@akrun si, come dice akrun – jenesaisquoi

Problemi correlati