我正在尝试在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)
我要为正常vs正常绿色,欺诈vs欺诈绿色,正常vs欺诈红色,欺诈vs正常红色上色。但是,由于我还在报表中的其他表中使用了formattable,因此我也想在这里使用它(以便报表中的所有表具有相同的样式。)
答案 0 :(得分:0)
好的,所以这是 a 解决方案,尽管不是一个完美的解决方案。首先,我们定义格式化程序–接收数据并将其转换为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
将向量组合成矩阵,将其变成数据框,添加行名并保存。