Ilya Ilya - 2 months ago 25
R Question

R: decimal ceiling

I need a decimal variant of

ceiling
and
floor
functions. Something like
signif
with an option to choose in which direction to round.

For example, I need the number 2.63 to be transformed into 2.7, and not 3 (
ceiling
) or 2.6 (
signif(2.63,2)
).




The only solutions I can think of is to multiply by 10, then take
ceiling
and divide back by 10.
ceiling(2.63*10)/10


I'm sure, there must be a more elegant solution.




My questions is quite similar to this one.

Answer

@42- answer in comment seems too useful to be just left in comment, hence this wiki-post.

You can create your own functions and adapt floor and ceiling fonctions, adding a level option to mimic the digits parameter of round function like this:

floor_dec <- function(x, level=1) round(x - 5*10^(-level-1), level)
ceiling_dec <- function(x, level=1) round(x + 5*10^(-level-1), level)

Examples:

# floor
floor_dec(1.259, 2)
[1] 1.25
floor_dec(1.9, 0)
[1] 1
floor_dec(29, -1)
[1] 20
floor_dec(1.251, 2)
[1] 1.25
floor_dec(1.2, 0)
[1] 1
floor_dec(23, -1)
[1] 20

# ceiling
ceiling_dec(1.259, 2)
[1] 1.26
ceiling_dec(1.9, 0)
[1] 2
ceiling_dec(29, -1)
[1] 30
ceiling_dec(1.251, 2)
[1] 1.26
ceiling_dec(1.2, 0)
[1] 2
ceiling_dec(23, -1)
[1] 30