【问题标题】:How to color one cell in my formattable in R如何在我的 R 格式表中为一个单元格着色
【发布时间】:2019-07-17 10:12:56
【问题描述】:

我正在尝试在 R 中创建一个带有 formattable 的表。我已经可以使用 formattable 创建一个颜色取决于值的表格。但是有一个单元格我只想变成红色,无论单元格中有什么,我都不知道该怎么做。

result_table <- cbind(Normal = c(1,2,3), Fraud = c(4,5,6))
row.names(result_table) <- c('Normal', "Suspicious", "Fraud")
my_df <- as.data.frame(result_table)
formattable(my_df)

我想将正常与正常绿色、欺诈与欺诈绿色、正常与欺诈红色、欺诈与正常红色着色。但是由于我对报告中的其他表格也使用了 formattable,所以我也想在这里使用它(这样我的报告中的所有表格都具有相同的样式。)

【问题讨论】:

  • 为我工作。不过说真的,你需要告诉我们你的数据是什么,你做了什么,输出了什么。你读过this intro吗?
  • 差不多了,只需将result_table 更正为my_results
  • 很遗憾,这不是问题所在,问题是我想将一些单元格涂成绿色,但我不知道该怎么做。

标签: r formattable


【解决方案1】:

好的,这里是一个的解决方案,虽然不是一个完美的解决方案。首先,我们定义格式化程序——获取数据并将其转换为 HTML 代码的函数:

red.f <- formatter("span", style=x~style(color="red"))
green.f <- formatter("span", style=x~style(color="green"))

可以使这些函数有条件,但不幸的是,格式化程序既没有很好的文档记录,作者也没有预见到你的问题。

那么现在。

my_df2 <- sapply(colnames(my_df), function(cn) {
   sprintf(
          ifelse(cn == rownames(my_df), green.f("%s"), red.f("%s")),
          my_df[,cn]
          )
    })
my_df2 <- data.frame(my_df2)
rownames(my_df2) <- rownames(my_df)
formattable(my_df2)

解释:我找不到将ifelse 放入格式化程序的方法。因此,我创建了一个以%s 作为占位符的字符向量,并使用 sprintf 使用列中的值填充它。然后,我使用sapply 将向量组合成一个矩阵,将其转换为一个数据框,添加行名和presto。

【讨论】:

  • 谢谢!是否还有一种方法可以为单元格的背景而不是文本着色,是否可以不对可疑行着色?
  • 是的,有,看看formattable包的例子。
猜你喜欢
  • 2019-08-18
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-21
  • 1970-01-01
  • 2018-01-10
相关资源
最近更新 更多