如何仅对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 )
关键调整点
- 修正汇总行生成逻辑:原代码中
summarise的语法有误,改用tibble单独构建汇总行,避免语法错误的同时保持原始数值完整。 - 表格层控制格式:用gt的
fmt_number函数精准指定:仅对year == "Summed"的行,对F/W/S/LF列设置两位小数,其他行不受影响。 - 不修改原始数据:不在数据处理阶段用
round修改数值,仅在表格渲染层控制显示格式,保证原始数据的准确性。
内容的提问来源于stack exchange,提问作者Salvador
相关产品推荐
相关产品推荐

