我想在 R 中对一些整数进行舍入。当然,我已经知道 round() 方法,但这似乎只适用于数据类型“double”或“float”。我如何舍入没有任何小数值的普通整数,例如
1445 --> 145
1526 --> 153
2474 --> 247
最佳答案
您可以添加 5 并使用 %/%
.
x <- c(1445L, 1526L, 2474L)
(x + 5L) %/% 10L
#[1] 145 153 247
基准:
x <- sample(1e5)
bench::mark(GKi = (x + 5L) %/% 10L,
Mael = round(x + .5, digit = -1) / 10,
user2554330 = floor(x/10 + 0.5)
)
# expression min median `itr/sec` mem_alloc `gc/sec` n_itr n_gc total…¹
# <bch:expr> <bch:tm> <bch:tm> <dbl> <bch:byt> <dbl> <int> <dbl> <bch:t>
#1 GKi 362.34µs 364.87µs 2463. 390.67KB 21.0 1172 10 476ms
#2 Mael 4.06ms 4.21ms 237. 1.53MB 10.6 112 5 472ms
#3 user2554330 329.37µs 335.93µs 2505. 781.3KB 46.2 1139 21 455ms
使用(x + 5L) %/% 10L
或floor(x/10 + 0.5)
目前速度相同,但是 %/%
使用更少的内存。
(x + 5L) %/% 10L
返回一个整数和 floor(x/10 + 0.5)
一个数字。
x <- 1234L
str(x)
# int 1234
str((x + 5L) %/% 10L)
# int 123
str(floor(x/10 + 0.5))
# num 123
关于r - 如何在 R 中对非双数进行舍入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74014879/