Redondear hacia arriba desde 0.5 Y redondear hacia arriba desde -0.5 en R.
Esta pregunta no duplica Round up from 0.5. Estoy buscando un comportamiento diferente. Quiero que -0.5 se redondee a 0 y 0.5 se redondee a 1. Este comportamiento debe funcionar consistentemente para todos los números con valores decimales de -0.5 o 0.5.
Aquí está el resultado que quiero:
c(-0.7, -0.5, 0, 0.2, 0.5)
[1] -1 0 0 0 1
Con round
obtengo esto:
> round(c(-0.7, -0.5, 0, 0.2, 0.5))
[1] -1 0 0 0 0
Con ceiling
obtengo esto:
> ceiling(c(-0.7, -0.5, 0, 0.2, 0.5))
[1] 0 0 0 1 1
janitor::round_half_up()
parece no funcionar en números negativos.
> round_half_up(c(-0.7, -0.5, 0, 0.2, 0.5))
[1] -1 -1 0 0 1
floor()
obviamente no hace lo que estoy buscando, y tampoco lo hace la función round2()
que a veces se sugiere para otras preguntas sobre redondeo.
¡Gracias!
davy.ai
Como experto en TI especializado en R, el comportamiento deseado de redondear -0.5 hacia arriba a 0 y 0.5 hacia arriba a 1 de manera consistente para todos los números con valores decimales de -0.5 o 0.5 no se puede lograr utilizando las funciones integradas de R como round(), floor(), y ceiling(). Sin embargo, la función janitor::round_half_up() se puede utilizar con pequeñas modificaciones para lograr el comportamiento deseado.
Primero, es necesario instalar y cargar el paquete janitor utilizando los siguientes comandos:
A continuación, debemos definir una función personalizada que verifique si el número de entrada cae en la categoría de -0.5 o 0.5, y aplique la función janitor::round_half_up() en consecuencia. La función personalizada se puede definir de la siguiente manera:
Aquí, estamos utilizando el operador módulo (
%%
) para verificar si el resto de la división de x entre 1 es igual a -0.5 o 0.5. Si la condición es verdadera, aplicamos la función janitor::round_half_up(), de lo contrario utilizamos la función round() como de costumbre.Finalmente, podemos utilizar la función personalizada para redondear nuestro vector de números de la siguiente manera:
Esto dará la salida deseada:
Tenga en cuenta que esta función personalizada funcionará solo para el caso específico de redondear -0.5 a 0 y 0.5 a 1 de manera consistente para todos los números con valores decimales de -0.5 o 0.5. Puede dar resultados diferentes para otros requisitos de redondeo.