如何在R语言中去除数值向量多余小数位,仅保留前两位?
如何在R中实际保留数值向量的前两位小数(去除多余位数)
嘿,这个需求很实用!要真正修改数值本身(而不是仅仅调整打印时的显示格式),有几种简单有效的方法,根据你是否需要四舍五入,可以选择不同的方案:
方法1:四舍五入保留两位小数(最常用)
使用基础R的round()函数,它会直接修改数值的实际值:
keep_the_first_two_decimal_places_only <- function(x) { round(x, digits = 2) } # 测试你的例子 x <- c(95.45000, 97.53333) keep_the_first_two_decimal_places_only(x) # [1] 95.45 97.53
这个方法会按照标准的四舍五入规则处理第三位小数,比如如果你的数值是97.536,结果会变成97.54。
方法2:直接截断多余小数位(不四舍五入)
如果你希望不管第三位小数是多少都直接舍去,而不是四舍五入,可以用trunc()函数结合乘法/除法来实现:
keep_the_first_two_decimal_places_only <- function(x) { trunc(x * 100) / 100 } # 测试例子 x <- c(95.45000, 97.53333) keep_the_first_two_decimal_places_only(x) # [1] 95.45 97.53 # 测试截断场景 y <- c(97.536, 82.199) keep_the_first_two_decimal_places_only(y) # [1] 97.53 82.19
这个方法会直接砍掉两位之后的所有小数,完全不进行四舍五入。
注意:别和format()混淆
很多人一开始会用format()函数,但它只是改变数值的显示格式,并不会修改数值本身的实际值:
# 反面例子:format只改显示,数值还是原来的 formatted_x <- format(x, digits = 2, nsmall = 2) formatted_x # [1] "95.45" "97.53" # 但实际类型变成了字符,数值本身没变化 as.numeric(formatted_x) # [1] 95.45000 97.53333
所以如果你需要实际修改数值,一定要用前面的两种方法,而不是format()。
内容的提问来源于stack exchange,提问作者umair durrani
相关产品推荐
相关产品推荐

