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

如何在kableExtra中为整数显示小数点(如7显示为7.0)

统一R表格数字小数位数的解决方案

问题背景

拥有如下R数据框:

data <- structure(list(Model = c("ARIMA", "Actual", "Forecast", "Error", 
"STIF", "Actual", "Forecast", "Error", "Adjusted Forecast", "Actual", 
"Forecast", "Error"), `*Dec 2022` = c(NA, 6.9, 6.8, 0.1, NA, 
6.9, 6.6, 0.3, NA, 6.9, 6.7, 0.2), `*Jan 2023` = c(NA, 7, 6.8, 
0.2, NA, 7, 6.8, 0.2, NA, 7, 6.9, 0.1), `*Feb 2023` = c(NA, 7.2, 
6.2, 1, NA, 7.2, 6.9, 0.3, NA, 7.2, 6.6, 0.6), Average = c(NA, 
7, 6.6, 0.4, NA, 7, 6.8, 0.3, NA, 7, 6.7, 0.3)), row.names = c(NA, 
-12L), class = c("tbl_df", "tbl", "data.frame"))

当前使用kableExtra和tidyverse生成表格的代码:

library(kableExtra)
library(tidyverse)

data %>% 
  mutate_if(is.numeric, ~as.character(.)) %>% 
  replace(is.na(.), " ") %>% 
  kable(caption="Short-Term Forecast Errors \\label{Table6}", booktabs = T, escape = FALSE, align = 'lcccc') %>% 
  kable_styling(latex_options = c("HOLD_position"), font_size = 9)

需要让表格内所有数字统一显示一位小数(例如整数7显示为7.0)。


解决方案

修改数值列的格式化逻辑,在转换为字符前统一保留一位小数,代码如下:

library(kableExtra)
library(tidyverse)

data %>% 
  mutate(across(where(is.numeric), ~sprintf("%.1f", .x))) %>%  # 格式化所有数值列为1位小数
  replace(is.na(.), " ") %>% 
  kable(caption="Short-Term Forecast Errors \\label{Table6}", booktabs = T, escape = FALSE, align = 'lcccc') %>% 
  kable_styling(latex_options = c("HOLD_position"), font_size = 9)

关键说明:

  • 用across(where(is.numeric), ...)替代旧版的mutate_if,这是tidyverse新版本推荐的语法,更清晰灵活
  • sprintf("%.1f", .x)会将每个数字格式化为带1位小数的字符串,自动为整数补.0(如7→7.0)
  • 若偏好更直观的函数,也可以用format(.x, nsmall = 1)替代sprintf,效果完全一致:
    mutate(across(where(is.numeric), ~format(.x, nsmall = 1)))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:52:55