Reputation: 1936
Is it possible to round up to the nearest whole number in R? I have time-stamped data and I want to round up to the nearest whole minute, to represent activities during this minute.
For example, if time is presented in minutes.seconds
format:
x <- c(5.56, 7.39, 12.05, 13.10)
round(x, digits = 0)
[1] 6 7 12 13
My anticipated output would instead be:
round(x, digits = 0)
[1] 6 8 13 14
I understand this is confusing but when I am calculating activity per minute data, rounding up to the nearest minute makes sense. Is this possible?
Upvotes: 45
Views: 95134
Reputation: 23011
Another way round up is to integer-divide the negation and negate the result back:
-(-x%/%1)
#[1] 6 8 13 14
Both the above approach and ceiling()
fall subject to floating point precision issues which causes a bug. For example 0.28/0.005
is 56 but ceiling(0.28/0.005)
is 57. To safeguard against such possibilities, we could first round the numbers up to a certain digit (say, 8) and take ceiling of them.
x <- 0.28/0.005
ceiling(x) # <--- not OK
ceiling(round(x, 8)) # <--- OK
Upvotes: 2
Reputation: 886938
We can use ceiling
to do the specified rounding
ceiling(x)
#[1] 6 8 13 14
Upvotes: 79