<- c(0.8992877, 0.023, -1.002, 1.236, 10.236000, 20.243, 10035.23)
x x
[1] 0.8992877 0.0230000 -1.0020000 1.2360000 10.2360000 20.2430000 10035.2300000
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 = 7
và scipen = 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.
<- c(0.8992877, 0.023, -1.002, 1.236, 10.236000, 20.243, 10035.23)
x 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)
::myround(x, digits = 2) -> x_3
broman 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