R语言使用formattable实现单元格合并及相关报错解决方案
问题原因
你遇到的报错是因为formattable()仅支持原生数据框/ tibble 类型的输入,传入flextable、gt这类自定义表格对象时无法识别,才会提示缺少formatter参数。
实现方案
方案1:直接用flextable/gt实现(推荐)
flextable和gt本身就支持自定义单元格样式、条件着色等formattable具备的美化能力,不需要额外嵌套formattable,直接用合并单元格后的flextable输出即可:
library(flextable) library(dplyr) # 先补全class列的空值,方便合并 df_fill <- df %>% tidyr::fill(class, .direction = "down") ft <- flextable(df_fill, col_keys = c("class", "name", "score")) # 垂直合并class列同值单元格 ft <- merge_v(ft, j = "class") # 可自行添加类似formattable的样式效果,比如高分标绿 ft <- colformat_num(ft, j = "score", color = ifelse(df_fill$score >= 15, "green", "black")) ft
运行后直接就能得到你要的垂直合并效果,各类样式均可自定义。
方案2:重构数据适配formattable
如果你必须使用formattable的特性,可以把相同class对应的多行列内容用<br>合并为单个单元格,重构数据后直接渲染:
library(dplyr) library(formattable) # 补全class空值,按class分组合并内容 df_new <- df %>% tidyr::fill(class, .direction = "down") %>% group_by(class) %>% summarise( name = paste(name, collapse = "<br>"), score = paste(score, collapse = "<br>"), .groups = "drop" ) # 直接渲染formattable即可 formattable(df_new)
渲染后同名class的内容会在同一单元格内换行,视觉效果和单元格合并完全一致。
注意事项
不要尝试把非数据框对象传入formattable,该包没有适配其他表格类对象的输入接口。
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

