Я пытаюсь округлить числа до 0.5. Мой набор данных следующий -

Wgt
0.160
0.522
0.174
0.765
1.246
2.893

Результат, который я хочу получить округлением

Round Wgt
0.5
1.0
0.5
1.0
1.5
3

В основном, потолок числа на 0.5. Пожалуйста, помогите мне с этим.

r
2
SushantG 5 Май 2016 в 09:40

3 ответа

Лучший ответ

Просто сделайте это:

x <- c(0.16, 0.522, 0.174, 0.765, 1.246, 2.893)
y <- x * 2
z <- ceiling(y)
z / 2

Это поможет вам встать на путь.

0.5 1.0 0.5 1.0 1.5 3.0
5
ogroendal 5 Май 2016 в 06:47

Не удалось найти явного ответа на этот вопрос, запеченный в R, но вот быстрый вопрос. Я создал функцию с именем half_ceil, которая выполняла желаемое поведение для одного значения, а затем использовал sapply, чтобы применить ее к вектору:

half_ceil = function(x){
  whole = ceiling(x)
  if(x >= whole - .5){
        return(whole)
  }
  return(whole - .5)
}
sapply(Wgt, half_ceil)

Это будет округлять значения с десятичной дробью 0,5 до следующего целого числа, а не в меньшую сторону, но вы можете сохранить эти значения такими, какие они есть, просто изменив знак «больше или равно» на знак «меньше».

0
Ian Bruce 5 Май 2016 в 07:05

Вы можете опробовать библиотеку plyr с функцией round_any, которая может делать именно это.

> library(plyr)
> x <- c(0.16, 0.522, 0.174, 0.765, 1.246, 2.893)
> round_any(x, 0.5, f=ceiling)
[1] 0.5 1.0 0.5 1.0 1.5 3.0
3
chappers 5 Май 2016 в 06:49