1

我正在尝试在 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,所以我也想在这里使用它(这样我报告中的所有表格都具有相同的样式。)

4

1 回答 1

0

好的,所以这是一个解决方案,虽然不是一个完美的解决方案。首先,我们定义格式化程序——获取数据并将其转换为 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。

于 2019-07-17T11:39:30.417 回答