在R中截断但不舍入

Mar*_*lla 5 r

确实很基础,但Google并未给出答案。有没有一种方法可以截断数值而不四舍五入

例如:

vars <- c(23.4567, 45.6795, 34.5670)
Run Code Online (Sandbox Code Playgroud)

我希望输出仅跳过最后两个有效数字,但不舍入输出。我想要的是:

vars <- c(23.45, 45.67, 34.56)
Run Code Online (Sandbox Code Playgroud)

但是,最常见的处理方法是四舍五入(当然,四舍五入也是有意义的

round(vars, 2)
Run Code Online (Sandbox Code Playgroud)

[1] 23.46 45.68 34.57

signif(vars, digits=4)
Run Code Online (Sandbox Code Playgroud)

[1] 23.46 45.68 34.57

如果这里已经解决了这个问题,请指出正确的方向,但找不到R特有的...

Jea*_*ams 5

您可以使用该floor()功能,但需要一些额外的帮助。

floor(100*vars)/100
Run Code Online (Sandbox Code Playgroud)


RHe*_*tel 5

您可以尝试 floor()

vars <- floor(vars*100)/100
Run Code Online (Sandbox Code Playgroud)

但是,此解决方案假定所有值都是正数,即floor()四舍五入到下一个较小的整数。如果存在负数,则此方法可能会产生不良结果:

> floor(-23.441*100)/100
#[1] -23.45
Run Code Online (Sandbox Code Playgroud)

因此,更通用的解决方案是使用trunc()

vars <- trunc(vars*100)/100
Run Code Online (Sandbox Code Playgroud)

这将删除前两位小数之后的任何数字,并且也适用于负数:

> trunc(-23.441*100)/100
#[1] -23.44
Run Code Online (Sandbox Code Playgroud)