【问题标题】:Way to merge flextables and retain formatting合并弹性表和保留格式的方法
【发布时间】:2019-02-24 23:29:21
【问题描述】:

假设我有 2 个弹性表:

ft1 <- regulartable(head(iris))
ft2 <- regulartable(tail(iris))

它们有不同的格式:

ft1 <- bg(ft1, bg="green")
ft2 <- color(ft2, color = "blue")

有没有办法在它们已经是弹性表之后合并这两个,并保持格式?

我可以用这个合并它们:

ft3 <- regulartable(rbind(ft1$body$dataset, ft2$body$dataset))

但我丢失了所有格式。

我知道在转换为弹性表之前合并数据框会更容易,但是我的实际数据的生成方式很困难,因为我尝试合并的两个弹性表是我编写的其他函数的结果。

编辑:

目的是保持单独的格式,如下所示:

【问题讨论】:

  • 这需要特定的开发才能实现。我将尝试在下一次开发运行中使其成为可能。为此,您不仅需要合并 x$body$dataset,还需要合并所有格式/跨度 - 存储在其他化合物中。
  • 酷,希望它可以很快成为一个功能。谢谢你总是这么快回复:)
  • @DavidGohel 只是想知道目前这可能吗?谢谢
  • @user63230 不,对不起

标签: r flextable


【解决方案1】:

不是很优雅,但可能会完成工作......

library(flextable)
library(magrittr)

ft1 <- regulartable(head(iris))
ft2 <- regulartable(tail(iris))

ft_formatting <- function(ft1, ft2,
                          color1 = "black", bg1 = "white", color2 = "black", bg2 = "white") {
  n_row1 <- nrow(ft1$body$dataset)
  n_row2 <- nrow(ft2$body$dataset)

  n_col1 <- ncol(ft1$body$dataset)
  n_col2 <- ncol(ft2$body$dataset)

  i_1 <- 1:n_row1
  i_2 <- n_row1+1:n_row2

  regulartable(rbind(ft1$body$dataset, ft2$body$dataset)) %>%
    bg(i = i_1, j = 1:5, bg = bg1) %>%
    color(i = i_1, j = 1:n_col1, color = color1) %>%
    bg(i = i_2, j = 1:5, bg = bg2) %>%
    color(i = i_2, j = 1:n_col2, color = color2)

}

ft_formatting(ft1, ft2, bg1 = "green", color2 = "blue")

【讨论】:

  • 这会将整个内容着色为绿色,并使所有文本变为蓝色。我希望保持原始表格中的格式,即只有前 6 行是绿色的,底部 6 行是蓝色的。对不起,如果我不清楚
  • 是的,这可以解决这个例子,我希望有一些更通用的东西,因为我的实际表格有很多格式。也许没有办法让它更通用:(
  • @RAB:我想通过一些努力是可能的。弹性表对象中包含所有格式信息,因此应该可以提取它,然后根据原始弹性表逐个单元格地应用格式来组装一个新的弹性表对象......但也许包开发人员更好适合这个任务...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多