在数据分析时,经常需要对数字进行取整或者四舍五入。R 语言里有几个常用的相关函数:ceiling()
、floor()
、trunc()
、round()
和 signif()
。
先看一下整体对比
函数 | 作用 | 示例 | 结果 |
---|---|---|---|
ceiling | 向上取整 | ceiling(-2.7) |
-2 |
floor | 向下取整 | floor(-2.7) |
-3 |
trunc | 截断小数 | trunc(-2.7) |
-2 |
round | 四舍五入 | round(-2.7) |
-3 |
signif | 有效数字 | signif(-2.7, 1) |
-3 |
多来几个例子再次对比:
2.7
ceiling(2.7) # 向上取整得到 3
## 3
floor(2.7) # 向下取整得到 2
## 2
trunc(2.7) # 截断小数,得到 2
## 2
round(2.7) # 四舍五入,得到 3
## 3
signif(2.7, 1) # 保留 1 位有效数字,得到 3
## 3
2.5
ceiling(2.5) # 向上取整得到 3
## 3
floor(2.5) # 向下取整得到 2
## 2
trunc(2.5) # 截断小数,得到 2
## 2
round(2.5) # 四舍五入,银行家舍入法,得到 2
## 2
signif(2.5, 1) # 保留 1 位有效数字,得到 2
## 2
-2.5
ceiling(-2.5) # 向上取整,结果是 -2(更接近 0)
## -2
floor(-2.5) # 向下取整,结果是 -3
## -3
trunc(-2.5) # 截断小数,得到 -2
## -2
round(-2.5) # 四舍五入,银行家舍入法,得到 -2
## -2
signif(-2.5, 1) # 保留 1 位有效数字,得到 -2
## -2
单独看每个函数:
1. 向上取整:ceiling(x)
ceiling()
会把数字往上取整,无论小数点后是多少。
ceiling(2.3)
## 3
ceiling(-2.3)
## -2
2. 向下取整:floor(x)
floor()
是往下取整,直接变成比原数小的最近整数。
floor(2.7)
## 2
floor(-2.7)
## -3
3. 截断小数部分:trunc(x)
trunc()
只保留整数部分,相当于朝 0 方向取整。
trunc(2.7)
## 2
trunc(-2.7)
## -2
4. 四舍五入:round(x, digits = 0)
round()
是最常见的四舍五入函数,可以指定保留几位小数(用 digits
参数)。
round(2.5)
## 2
round(2.6)
## 3
round(3.5)
## 4
round(2.345, digits=2)
## 2.35
需要注意,R 默认用的是“银行家舍入法”,也就是 .5 时会取最接近的偶数,所以round(2.5)和round(3.5)分别得到2和4。
5. 有效数字:signif(x, digits = 6)
如果想保留有效数字而不是小数点后几位,可以用 signif()
。
signif(123.456, digits=2)
## 120
signif(0.0123456, digits=2)
## 0.012
小结
实际应用中,统一向上取整可以用 ceiling()
,向下取整用 floor()
,只保留整数部分则用 trunc()
。最常见的四舍五入用 round()
,如果需要控制有效数字位数就用 signif()
。这些函数可以满足日常数据处理中的各种取整和四舍五入需求。建议把上面的代码直接粘到 Rstudio里试试,体会一下它们的区别和实际效果。