四舍五入到下一个显着数字
Round up to next salient number
我正在处理绘图函数,需要定义放置轴标签的位置。在计算每个标签之间的增量时,我想避免标签位于 142、284 等位置,而希望它们位于 150、300 等位置。
但是,数字并不总是在同一范围内。以下是我计划如何使用函数对它们进行舍入:
- 介于 0 和 1 之间:四舍五入到第一位小数
- 1 到 10 之间:四舍五入为整数或 .5
- 11 到 20 之间:四舍五入为整数
- 21 到 100 之间:四舍五入到 5 的倍数
- 101 到 200 之间:四舍五入到 10 的倍数
- 201 到 1000 之间:四舍五入到 50 的倍数
- 1001 到 2000 之间:四舍五入到 100 的倍数
- 2001 到 10000 之间:四舍五入到 500 的倍数
我的问题出在数字 2 上。如何四舍五入到 .5 的倍数?另外,是否有可用于此类标签问题的替代标准函数?
我建议使用 dplyr
的 case_when
来制定一套这样的规则。
library(dplyr)
my_format <- function(x) {
case_when(
between(x, 0, 1) ~ ceiling(x / .1 ) * .1,
between(x, 1, 10) ~ ceiling(x / .5 ) * .5,
between(x, 11, 20) ~ ceiling(x / 1 ) * 1,
between(x, 21, 100) ~ ceiling(x / 5 ) * 5,
between(x, 101, 200) ~ ceiling(x / 10 ) * 10,
between(x, 201, 1000) ~ ceiling(x / 50 ) * 50,
between(x, 1001, 2000) ~ ceiling(x / 100) * 100,
between(x, 2001, 10000) ~ ceiling(x / 500) * 500
)
}
my_format(0.44)
#> [1] 0.5
my_format(4.1)
#> [1] 4.5
my_format(4.51)
#> [1] 5
my_format(11.1)
#> [1] 12
my_format(22.5)
#> [1] 25
my_format(121.1)
#> [1] 130
my_format(201.1)
#> [1] 250
my_format(1002.3)
#> [1] 1100
my_format(2001.1)
#> [1] 2500
我正在处理绘图函数,需要定义放置轴标签的位置。在计算每个标签之间的增量时,我想避免标签位于 142、284 等位置,而希望它们位于 150、300 等位置。
但是,数字并不总是在同一范围内。以下是我计划如何使用函数对它们进行舍入:
- 介于 0 和 1 之间:四舍五入到第一位小数
- 1 到 10 之间:四舍五入为整数或 .5
- 11 到 20 之间:四舍五入为整数
- 21 到 100 之间:四舍五入到 5 的倍数
- 101 到 200 之间:四舍五入到 10 的倍数
- 201 到 1000 之间:四舍五入到 50 的倍数
- 1001 到 2000 之间:四舍五入到 100 的倍数
- 2001 到 10000 之间:四舍五入到 500 的倍数
我的问题出在数字 2 上。如何四舍五入到 .5 的倍数?另外,是否有可用于此类标签问题的替代标准函数?
我建议使用 dplyr
的 case_when
来制定一套这样的规则。
library(dplyr)
my_format <- function(x) {
case_when(
between(x, 0, 1) ~ ceiling(x / .1 ) * .1,
between(x, 1, 10) ~ ceiling(x / .5 ) * .5,
between(x, 11, 20) ~ ceiling(x / 1 ) * 1,
between(x, 21, 100) ~ ceiling(x / 5 ) * 5,
between(x, 101, 200) ~ ceiling(x / 10 ) * 10,
between(x, 201, 1000) ~ ceiling(x / 50 ) * 50,
between(x, 1001, 2000) ~ ceiling(x / 100) * 100,
between(x, 2001, 10000) ~ ceiling(x / 500) * 500
)
}
my_format(0.44)
#> [1] 0.5
my_format(4.1)
#> [1] 4.5
my_format(4.51)
#> [1] 5
my_format(11.1)
#> [1] 12
my_format(22.5)
#> [1] 25
my_format(121.1)
#> [1] 130
my_format(201.1)
#> [1] 250
my_format(1002.3)
#> [1] 1100
my_format(2001.1)
#> [1] 2500