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

如何仅对bind_rows(summarise)生成的汇总行应用round()函数?

解决方法

核心思路是不对原始数据做round修改,而是在gt表格渲染阶段针对汇总行单独设置小数格式,这样既不会影响其他行的显示,又能精准控制汇总行的格式。

修正后的完整代码

library(dplyr)
library(gt)

# 原始数据定义
a <- structure(list(SampleDate = structure(c(15710, 15713, 15713, 
15710, 15710, 15713, 15713, 15710, 15708, 15713, 15712, 15708, 
15708, 15713, 15712, 15708), class = "Date"), year = c("2012", 
"2013", "2013", "2012", "2013", "2013", "2013", "2013", "2013", 
"2012", "2013", "2013", "2013", "2013", "2013", "2013"), F = c(0, 
1, 0, 0, 0, 1, 0, 0, 0, 22, 0, 0, 0, 65, 0, 0), W = c(0, 0, 1, 
0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0), S = c(0, 0, 0, 0, 1, 
0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0), LF = c(1, 0, 0, 1, 0, 0, 0, 
1, 0, 0, 0, 0, 1, 0, 0, 1), week = c("01", "02", "02", "01", 
"01", "02", "02", "01", "01", "02", "02", "01", "01", "02", "02", 
"01"), month = c("January", "January", "January", "January", 
"January", "January", "January", "January", "January", "January", 
"January", "January", "January", "January", "January", "January"
)), row.names = c(NA, -16L), class = "data.frame")

# 数据处理 + gt表格格式设置
a %>% 
  group_by(year, SampleDate) %>%
  summarise(F = sum(F), W = sum(W), S = sum(S), LF = sum(LF), count = n(), .groups = "drop") %>%  
  mutate(across(c(year, SampleDate), as.character)) %>%
  # 生成汇总行(保留原始数值,不提前round)
  bind_rows(tibble(
    year = "Summed",
    SampleDate = "- - - - -",
    F = sum(.$F),
    W = sum(.$W),
    S = sum(.$S),
    LF = sum(.$LF),
    count = nrow(.)
  )) %>%
  gt() %>%
  # 仅对汇总行(year为Summed)的指定列设置两位小数
  fmt_number(
    columns = c(F, W, S, LF),
    rows = year == "Summed",
    decimals = 2
  )

关键调整点

  1. 修正汇总行生成逻辑:原代码中summarise的语法有误,改用tibble单独构建汇总行,避免语法错误的同时保持原始数值完整。
  2. 表格层控制格式:用gt的fmt_number函数精准指定:仅对year == "Summed"的行,对F/W/S/LF列设置两位小数,其他行不受影响。
  3. 不修改原始数据:不在数据处理阶段用round修改数值,仅在表格渲染层控制显示格式,保证原始数据的准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:40:40