如何在gt表格的Total行下方添加自定义标准误汇总行?
关于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(year:SampleDate, as.character)) %>% gt() %>% # 第一行汇总:Total求和 summary_rows( columns = F:count, fns = list(label = "Total", fn = ~sum(., na.rm = TRUE)), fmt = ~fmt_number(., decimals = 0) ) %>% # 第二行汇总:标准误计算(排在Total行下方) summary_rows( columns = F:LF, fns = list(label = "标准误", fn = ~1.96*(sd(., na.rm = TRUE)/sqrt(length(.)))), fmt = ~fmt_number(., decimals = 3) )
核心要点说明
添加多行汇总行
gt支持多次调用summary_rows(),后续调用的汇总行会自动排在之前的汇总行下方。只需先定义Total求和行,再定义标准误行即可实现需求。标准误函数的正确传入方式
summary_rows()的fn参数需要接收公式形式的函数,其中.代表当前列的向量,不能直接写针对特定列的表达式。加入na.rm = TRUE是为了避免空值导致计算出错,提升代码健壮性。数据处理优化
用.groups = "drop"替代单独的ungroup(),是dplyr 1.0.0+版本的规范写法,可直接在summarise()中指定分组处理逻辑。
内容的提问来源于stack exchange,提问作者Salvador
相关产品推荐
相关产品推荐

