23  Hướng dẫn cách làm tròn số trong R

Bài viết này làm rõ hơn cách làm tròn số trong R ở video CÁCH LÀM TRÒN SỐ TRONG R | Lệnh round(), signif() trong chuyên đề 1 Coding in R.

Giả sử bạn có vector x như sau. Khi in ra console thì mặc định sẽ có giá trị rất dài như bên dưới vì mặc định digits = 7scipen = 0 trong R đã thiết lập format khi in ra con số (numeric) có số lượng số sau dấu thập phân như vậy.

x <- c(0.8992877, 0.023, -1.002, 1.236, 10.236000, 20.243, 10035.23)
x
[1]     0.8992877     0.0230000    -1.0020000     1.2360000    10.2360000    20.2430000 10035.2300000

Bây giờ bạn muốn thu được vector numeric x chỉ gồm các con số có 2 số sau dấu thập phân thì ta sẽ áp dụng 1 trong các cách sau.

Cách 1: Sử dụng function round() trong base R, kết quả thu được là numeric vector

round(x, digits = 2) -> x_1
x_1
[1]     0.90     0.02    -1.00     1.24    10.24    20.24 10035.23

Cách 2: Sử dụng function sprintf() trong base R, kết quả là character vector do đó cần convert qua vector numeric nếu cần dùng để tính toán tiếp theo.

sprintf("%.2f", x) -> x_2 
x_2
[1] "0.90"     "0.02"     "-1.00"    "1.24"     "10.24"    "20.24"    "10035.23"
as.numeric(x_2) ## convert qua dạng numeric vector
[1]     0.90     0.02    -1.00     1.24    10.24    20.24 10035.23

Cách 3: Sử dụng function myround() trong package broman, kết quả là character vector

library(broman)
broman::myround(x, digits = 2) -> x_3
x_3
[1] "0.90"     "0.02"     "-1.00"    "1.24"     "10.24"    "20.24"    "10035.23"
as.numeric(x_3) ## convert qua dạng numeric vector
[1]     0.90     0.02    -1.00     1.24    10.24    20.24 10035.23

Cả 3 cách này đều thu được kết quả y chang nhau.

identical(x_1, as.numeric(x_2))
[1] TRUE
identical(x_1, as.numeric(x_3))
[1] TRUE
identical(as.numeric(x_2), as.numeric(x_3))
[1] TRUE