四舍五入到最接近的 10
Round Down to the Nearest 10
所以我有一列值从 10 到 100,我希望所有值都四舍五入到最接近的 10。诀窍是我希望它总是向下舍入。例如,55 会变成 50 而不是 60。我想 floor 会为此实现,但是当我尝试 floor 时,它只返回相同的值而没有改变。
x
10
15
20
27
30
34
等...
我想要的:
x
10
10
20
20
30
30
我尝试了什么:
data$x <- floor(data$x)
这只给了我完全相同的值。
由于floor(x)
得到的是不大于x
的最小整数y
,所以可以将x
中的所有值除以十,取底数,然后相乘十点回来;即,您可以使用 floor(x/10) * 10
x <- c(10,
15,
20,
27,
30,
34)
floor(x/10) * 10
# [1] 10 10 20 20 30 30
您不需要在此处查看 %/%
v%/%10*10
[1] 10 10 20 20 30 30
我迟到了,但我确实有一个类似的解决方案,似乎 运行 相当快。它与其他选项类似,但使用 trunc
函数。
x<- c(10, 15, 20, 27, 30, 34)
trunc(x / 10) * 10
#> [1] 10 10 20 20 30 30
identical(x %/% 10 * 10, floor(x/10) * 10)
#> [1] TRUE
identical(trunc(x / 10) * 10, floor(x/10) * 10)
#> [1] TRUE
由 reprex package (v0.2.1)
于 2019-01-09 创建
我已经用 microbenchmark
扩大了 x
向量和 运行 所有三个向量的大小。 trunc
方法在此数据上最快。
set.seed(42)
x <- sample(x, size = 10000000, replace = TRUE)
library(microbenchmark)
microbenchmark(trunc(x / 10) * 10,
floor(x / 10) * 10,
x%/%10*10)
#> Unit: milliseconds
#> expr min lq mean median uq
#> trunc(x/10) * 10 55.89856 58.57783 66.08508 65.62727 71.74459
#> floor(x/10) * 10 95.50139 99.18817 108.17770 108.10694 113.86548
#> x%/%10 * 10 143.65839 150.77401 157.42086 158.56745 161.84987
#> max neval
#> 95.49897 100
#> 147.47947 100
#> 188.56060 100
由 reprex package (v0.2.1)
于 2019-01-09 创建
所以我有一列值从 10 到 100,我希望所有值都四舍五入到最接近的 10。诀窍是我希望它总是向下舍入。例如,55 会变成 50 而不是 60。我想 floor 会为此实现,但是当我尝试 floor 时,它只返回相同的值而没有改变。
x
10
15
20
27
30
34
等...
我想要的:
x
10
10
20
20
30
30
我尝试了什么:
data$x <- floor(data$x)
这只给了我完全相同的值。
由于floor(x)
得到的是不大于x
的最小整数y
,所以可以将x
中的所有值除以十,取底数,然后相乘十点回来;即,您可以使用 floor(x/10) * 10
x <- c(10,
15,
20,
27,
30,
34)
floor(x/10) * 10
# [1] 10 10 20 20 30 30
您不需要在此处查看 %/%
v%/%10*10
[1] 10 10 20 20 30 30
我迟到了,但我确实有一个类似的解决方案,似乎 运行 相当快。它与其他选项类似,但使用 trunc
函数。
x<- c(10, 15, 20, 27, 30, 34)
trunc(x / 10) * 10
#> [1] 10 10 20 20 30 30
identical(x %/% 10 * 10, floor(x/10) * 10)
#> [1] TRUE
identical(trunc(x / 10) * 10, floor(x/10) * 10)
#> [1] TRUE
由 reprex package (v0.2.1)
于 2019-01-09 创建我已经用 microbenchmark
扩大了 x
向量和 运行 所有三个向量的大小。 trunc
方法在此数据上最快。
set.seed(42)
x <- sample(x, size = 10000000, replace = TRUE)
library(microbenchmark)
microbenchmark(trunc(x / 10) * 10,
floor(x / 10) * 10,
x%/%10*10)
#> Unit: milliseconds
#> expr min lq mean median uq
#> trunc(x/10) * 10 55.89856 58.57783 66.08508 65.62727 71.74459
#> floor(x/10) * 10 95.50139 99.18817 108.17770 108.10694 113.86548
#> x%/%10 * 10 143.65839 150.77401 157.42086 158.56745 161.84987
#> max neval
#> 95.49897 100
#> 147.47947 100
#> 188.56060 100
由 reprex package (v0.2.1)
于 2019-01-09 创建