user2716568
user2716568

Reputation: 1936

How to round up to whole number in R?

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

Answers (2)

cottontail
cottontail

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

akrun
akrun

Reputation: 886938

We can use ceiling to do the specified rounding

ceiling(x)
#[1]  6  8 13 14

Upvotes: 79

Related Questions