2013-08-28 17 views
8

Ora, ci sono state alcune domande molto simili su SO su arrotondamento e significato, ma non risolve il problema. Eccolo:Arrotondamento dei numeri a 10 in R

Come per arrotondare i numeri che si verificano in modo casuale come questi:

data <- c(152.335, 39.431, 21.894) 

vorrei averli arrotondati come questo:

c(150,40,20) 

ho provato:

print(formatC(signif(data,digits=2), digits=2,format="f")) 

Uscita:

[1] "150.00" "39.00" "22.00" 

Il comando precedente richiede di modificare digits= in 1 o 2 per ottenere il risultato desiderato. Ma vorrei un comando globale adatto a tutti. Grazie.

+0

SO 21,8 compie 20? questo non ha senso. – Fernando

+0

Duplicato? http://stackoverflow.com/questions/6461209/how-to-round-up-to-the-nearest-10-or-100-or-x – Henrik

+0

@Fernando, sembra che Max desideri arrotondare il 10 più vicino. – Henrik

risposta

17

Da ?round

Arrotondare a un numero negativo di cifre significa arrotondare a una potenza di di dieci, quindi ad esempio 'round (x, cifre = -2)' arrotondamenti al centesimo più vicino a .

Quindi,

data <- c(152.335, 39.431, 21.894) 
round(data, -1) 
#[1] 150 40 20 
+0

La tua soluzione semplice funziona meravigliosamente. Grazie. – Maximilian

2

In realtà si desidera un argomento diverso per signif qui. Questo sembra fare il trucco - 2 cifre per il primo argomento, uno per gli ultimi due:

R> dat <- c(152.335, 39.431, 21.894) 
R> dat 
[1] 152.335 39.431 21.894 
R> signif(dat, digits=c(2,1,1)) 
[1] 150 40 20 
R> 

È forse possibile generalizzare questo attraverso qualcosa di simile

R> signif(dat, digits=floor(log10(dat))) 
[1] 150 40 20 
R> 
+0

Grazie. In realtà appena scoperto (come sottolineato da Henrik), il comando plyr package: round_any (data, 5), fa quello che mi serve. Ma la tua soluzione è di base R e quindi nessun pacchetto richiesto! – Maximilian

Problemi correlati