r - 使用 dplyr 在新列中添加彩色点

标签 r dplyr flextable

我想根据另一列的值在新列中添加彩色点。

我有:

data <-
  tibble(
    one = rep("placeholder text",5),
    one_text = 0:4
  )

并且可以使用以下方法创建一个带有彩色点的新列:

black_dot <- "\U2B24"    

data %>%
      flextable %>%
      compose( j = "one",
              value = as_paragraph(
                                  as_chunk(black_dot, props = fp_text(color = "red")
                                           )
                                ),
              part = "body")

我想传入 one_text 列中的值,并根据此逻辑在最终帧中具有相应的颜色编码圆圈

colour_choice = function(x){
  if (x == 0) {
    "green"
  } else if ( x >= 3) {
    "red"
  } else {
    "orange"
  }
}

当我尝试时:

data %>%
  flextable %>%
  compose( j = "one",
          value = as_paragraph(
                              as_chunk(black_dot, props = fp_text(color = colour_choice( ~ .one_text))
                                       )
                            ),
          part = "body")

我得到:

enter image description here

有没有办法让圆圈相应地着色?

library(officedown)
library(knitr)
library(tidyverse)
library(flextable)
library(officer)

最佳答案

您可以通过矢量化 colour_choice 函数来实现此目的:

colour_choice <- Vectorize(colour_choice)

data %>%
  flextable %>%
  compose( j = "one",
           value = as_paragraph(
             as_chunk(black_dot, props = fp_text(color = colour_choice(one_text))
             )
           ),
           part = "body")

产生

Table with red, green and orange dots

关于r - 使用 dplyr 在新列中添加彩色点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71068389/

相关文章:

r - 在 docx 中为 flextable 添加标题

r - FlexTable 输出 .docx 水平表格调整为窄边距

r - 仅对某些列进行水平合并

javascript - 覆盖 R Shiny 模态对话框中的关闭按钮

r - 设置循环以在 R 中同时运行多个交叉表

r - R 中的显式公式与符号导数

r - Dplyr:仅当行值 > 0 时才使用汇总跨来取列的平均值

r - 从数据框中提取单独的列

r - 具有多个条件和 OR 的 dplyr 过滤器

r - 根据 R 中单列中给定的列名从其他列复制值