R语言gt包tab_footnote如何按查找表为不同列指定行加脚注
错误原因
你原来的写法会将传入cells_body的所有列和所有行做交叉匹配,相当于同时给Grp2、Grp3两列的第1、2、4行全部添加脚注,和预期需求不符。
解决方案
tab_footnote的locations参数支持传入多个cells_body对象组成的列表,你可以按列分组为每列单独指定匹配的行,再合并为位置列表传入即可。
方法1:适配任意长度查找表的通用写法
library(gt) library(dplyr) library(purrr) # 示例数据集 df = data.frame(Indicators = c("P1","P2","P3","P4","P5"), Grp1 = c(3,2,1,1,4), Grp2 = c(3,4,4,2,2), Grp3 = c(1,1,2,1,4)) # 查找表 lookup <- data.frame(grp = c("Grp2","Grp2","Grp3"), rows = c(2,4,1)) # 按列分组生成脚注位置列表 footnote_locs <- lookup %>% group_split(grp) %>% map(~ cells_body(columns = .x$grp[1], rows = .x$rows)) # 生成带脚注的gt表 df %>% gt() %>% tab_footnote( footnote = "Corrected value", locations = footnote_locs )
方法2:查找表内容较少时的手动写法
df %>% gt() %>% tab_footnote( footnote = "Corrected value", locations = list( cells_body(columns = "Grp2", rows = c(2,4)), cells_body(columns = "Grp3", rows = 1) ) )
两种写法运行后都可以实现需求:Grp2列仅第2、4行标记脚注,Grp3列仅第1行标记脚注,所有标记单元格共用同一个脚注。
内容的提问来源于stack exchange,提问作者rollan
相关产品推荐
相关产品推荐

