【问题标题】:Set FlexTable color in a row based on the value in another row of the same column and do this across all columns根据同一列另一行中的值在一行中设置 FlexTable 颜色,并在所有列中执行此操作
【发布时间】:2022-12-23 05:51:53
【问题描述】:

我在 flextable 中有一些数据,我需要为所有列的第 5 行(“一些文本”)中的文本着色,并根据第 2、3 和 4 行的值设置颜色。

例如,如果第 2 行的值在 4 到 10 之间,第 3 行的值 > 2,第 4 行的值 < 0.25,我想将第 5 行的文本着色为红色。如果第 2 行中的值小于 4,无论第 3 行和第 4 行中的值如何,我想将第 5 行中的文本着色为灰色。

使用下面的数据,第 1 列的第 5 行将为灰色,因为第 2 行小于 4,第 3 列的第 5 行将为红色,因为第 2 行的值介于 4 和 10 之间,第 3 行的值大于 2第 4 行的值小于 0.25。

# Some data 
SalesData <- data.frame(V1 = c("A", 1, 0, 1.0, "Some text"), 
                        V2 = c("B", 14, 0, 0.8, "Some text"), 
                        V3 = c("C", 4, 3, 0.20, "Some text"))

任何帮助将不胜感激。

【问题讨论】:

  • 为什么你的 df 混合数字和字符?它最后只能是字符列(那么你所表达的条件格式是不可能的)。你不能从更多开始吗整齐的结构体?
  • 嗨@David Gohel。它最初更整洁,但我不得不转置数据,因为这是报告所需的格式。有没有一种方法可以将最初更整洁的数据放入 FlexTable,有条件地为我需要的列着色,然后转置数据以满足最终报告要求?

标签: r r-markdown flextable


【解决方案1】:

您可以通过这种方式格式化给定单元格的颜色。规则与您的不完全相同,但您可以轻松适应。

library(flextable)
library(officer)
library(dplyr)

SalesData <- data.frame(V1 = c("A", 1, 0, 1.0, "Some text"), 
                        V2 = c("B", 14, 0, 0.8, "Some text"), 
                        V3 = c("C", 4, 3, 0.20, "Some text"))
ft <- flextable(SalesData)

colnb <- ncol(SalesData)
for (col in 1:colnb) {
  if (SalesData[2, col] >= 1 & SalesData[2, col] < 10 & SalesData[4, col] >= 0.5) {
    ft <- style(ft, i = 5, j = col, 
        pr_t = fp_text_default(
          shading.color = "red"))
  } else {
    ft <- style(ft, i = 5, j = col, 
        pr_t = fp_text_default(
          shading.color = "blue"))
  }
}

autofit(ft)

【讨论】:

    猜你喜欢
    • 2021-06-07
    • 2018-12-11
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2020-05-20
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多