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

使用dplyr在R中生成表格:如何保留一位小数(含末尾零)?

解决dplyr中数值四舍五入后1.0显示为1的问题

你用mutate_if(is.numeric, round, 1)确实能把数值精确到十分位,但R默认会自动省略小数部分末尾的0,所以1.0会被显示成1。要强制显示一位小数,得控制数值的显示格式,而不只是调整数值精度,下面给两种实用方案:

方案1:转字符型(适合仅展示,无需后续计算)

用sprintf函数直接格式化输出为带一位小数的字符串,既能保证精度,又能固定显示格式:

library(dplyr)

# 示例数据
df <- tibble(数值列 = c(1, 2.34, 5.67))

# 格式化处理
df %>%
  mutate_if(is.numeric, ~sprintf("%.1f", round(., 1)))

输出结果会是:

# A tibble: 3 × 1
  数值列
  <chr>
1 1.0  
2 2.3  
3 5.7  

这里"%.1f"是格式化规则,强制保留1位小数;先round确保数值精度,再用sprintf固定显示格式。

方案2:保留数值型(适合后续还要做计算)

如果需要保留数值类型,同时显示一位小数,可以用formattable包的工具,它能在保留数值属性的同时指定显示格式:

library(dplyr)
library(formattable)

df <- tibble(数值列 = c(1, 2.34, 5.67))

df %>%
  mutate_if(is.numeric, ~formattable(round(., 1), digits = 1, format = "f"))

此时列仍是数值型,可以正常做加减乘除,但打印/输出时会固定显示一位小数。

另外,如果你用gt、kable这类专业表格包,也可以在渲染表格时单独设置列格式,比如gt包的fmt_number(columns = everything(), decimals = 1),不用修改原数据类型,直接在输出时控制显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:37:05