2013-08-28 17 views
8

W tej chwili pojawiły się bardzo podobne pytania na temat zaokrąglania i znaczenia, ale nie rozwiązuje mojego problemu. Oto ona:Zaokrąglanie liczb do najbliższych 10 w R

Jak zaokrąglić liczby losowo występujące, takie jak:

data <- c(152.335, 39.431, 21.894) 

chciałbym mieć je zaokrąglone tak:

c(150,40,20) 

Próbowałem:

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

Wyjście:

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

Powyższe polecenie wymaga ode mnie zmiany digits= na 1 lub 2 w celu uzyskania pożądanego rezultatu. Ale chciałbym mieć globalne dopasowanie do wszystkich poleceń. Dzięki.

+0

SO 21,8 Okazuje 20? to nie ma sensu. – Fernando

+0

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

+0

@Fernando, wygląda na to, że Max chce zaokrąglić do najbliższej 10. – Henrik

Odpowiedz

17

Od ?round

Zaokrąglanie do ujemnej liczby cyfr oznacza zaokrąglanie do wartości z dziesięciu, więc na przykład "round (x, digits = -2)" runduje do najbliższych stu.

Więc

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

Twoje proste rozwiązanie działa cudownie. Dzięki. – Maximilian

2

Tutaj naprawdę chcesz inny argument dla signif. Wydaje się to załatwi - 2 cyfry dla pierwszego argumentu, jeden do dwóch ostatnich:

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> 

Można ewentualnie uogólnić to przez coś jak

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

Dzięki. W rzeczywistości właśnie się dowiedziałem (jak zauważył Henrik), polecenie plyr package: round_any (data, 5), robi to, czego potrzebuję. Ale twoje rozwiązanie pochodzi od R basic, a więc nie jest wymagane żadne paczuszki! – Maximilian

Powiązane problemy