2013-08-28 3 views
8

Теперь у нас возникли очень похожие вопросы по поводу округления и значимости, но не решает мою проблему. Вот оно:Число округлений до ближайших 10 в R

Как округлить случайно встречающиеся числа, подобные этим:

data <- c(152.335, 39.431, 21.894) 

Я хотел бы, чтобы они закруглены, как это:

c(150,40,20) 

Я попытался:

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

Выход:

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

Вышеуказанная команда требует от меня изменить digits= на 1 или 2, чтобы получить желаемый результат. Но я хотел бы, чтобы глобальная команда соответствовала всей команде. Благодарю.

+0

SO 21,8 получается 20? это не имеет смысла. – Fernando

+0

Дубликат? http://stackoverflow.com/questions/6461209/how-to-round-up-to-the-nearest-10-or-100-or-x – Henrik

+0

@Fernando, кажется, что Макс хочет округлить до ближайших 10. – Henrik

ответ

17

От ?round

Округление до отрицательного числа цифр означает округление до из десяти, например, округлые (x, цифры = -2) 'раунды до ближайшей сотны.

Так,

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

Ваше простое решение работает чудесно. Благодарю. – Maximilian

2

На самом деле вам нужен другой аргумент для signif. Это, кажется, делает трюк - 2 цифры для первого аргумента, один для двух последних:

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> 

Вы можете, возможно, обобщать это через что-то вроде

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

Спасибо. Фактически только что выяснилось (как указал Хенрик), команда plyr package: round_any (данные, 5), делает то, что мне нужно. Но ваше решение от R basic и, следовательно, пакет не требуется! – Maximilian

Смежные вопросы