You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R的tidyverse中如何强制0、1等数值显示两位小数?

解决数据框数值强制显示两位小数的问题

你的问题出在round()函数的作用上:它只是对数值进行四舍五入计算,并不会改变R对数值的显示规则——R会自动省略末尾无意义的0,所以0、0.5这类值会显示成整数或一位小数。要强制显示两位小数,需要用格式化函数来处理。

可行的tidyverse解决方案

  1. 转成带两位小数的字符型(最直接)
    使用format()函数结合nsmall=2参数,先四舍五入再格式化:

    mutate_at(vars(-N), funs(format(round(., 2), nsmall = 2)))
    

    如果你的tidyverse版本较新,推荐使用across()替代已软弃用的mutate_at():

    mutate(across(-N, ~ format(round(.x, 2), nsmall = 2)))
    
  2. 用sprintf()格式化
    效果和上面一致,语法更简洁:

    mutate_at(vars(-N), funs(sprintf("%.2f", round(., 2))))
    # 新版本写法
    mutate(across(-N, ~ sprintf("%.2f", round(.x, 2))))
    
  3. 全局设置显示规则(不推荐,影响全局)
    如果你想保持数值类型不变,仅在查看时显示两位小数,可以设置全局选项:

    options(digits = 2)
    

    但这个设置会作用于所有数值的显示,可能影响其他数据的查看。

你之前代码报错的原因

你错误地把nsmall=2放在了round()函数的参数里,nsmall是format()的参数,必须嵌套在格式化函数中使用,不能直接和round()联用。

内容的提问来源于stack exchange,提问作者William Hutson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 11:48:35