r - 条件格式 FlexTable

标签 r reporters

我正在寻找一种使用百分比数字通过 ReporteR 有条件地格式化弹性表的方法。下面是一个小例子。

packs <- list("ReporteRs","scales")
lapply(packs,require,character.only = TRUE)

dat <- cbind.data.frame(rep("ABCD",2),c(0.07,0.11),c(0.03,0.01))
colnames(dat) <- c("A","B","C")
dat[,2] <- percent(dat[,2])

pp = pptx()
pp = addSlide(pp, "Title and Content")
datft = FlexTable(data = dat)
cname <- c("B","C") 

for (i in cname) {
   if (i=="B") {
   datft[dat[, i] <= 10, i] = cellProperties( background.color = "green" )
   datft[dat[, i] > 10, i] = cellProperties( background.color = "red" )
   } else if (i=="C") {
   datft[dat[, i] <= 0.02, i] = cellProperties( background.color = "green" )
   datft[dat[, i] > 0.02, i] = cellProperties( background.color = "red" )   
   }
}
pp = addFlexTable(pp, datft)
writeDoc(pp, paste(getwd(),"/example.pptx",sep=""))

这对于 C 列效果很好,但显然不适用于 B 列,因为它不是数字。我无法找到一种方法来应用在更改背景颜色后将值格式化为百分比数字的函数。

最佳答案

试试这个(在评论中给出解释,但经过测试):

for (i in cname) {
   if (i=="B") {
   datft[as.numeric( sub("%", "", dat[, i])) <= 10, i] = cellProperties( background.color = "green" )
   datft[ as.numeric( sub("%", "", dat[, i])) > 10, i] = cellProperties( background.color = "red" )
   } else if (i=="C") {
   datft[dat[, i] <= 0.02, i] = cellProperties( background.color = "green" )
   datft[dat[, i] > 0.02, i] = cellProperties( background.color = "red" )   
   }
}

关于r - 条件格式 FlexTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32038542/

相关文章:

c++ - 使用 Rcpp 模块将简单的 C++ 学生类暴露给 R

r - 在 R 中将熔化数据帧转换为矩阵

r - 使用 ReporteRs 包通过 R Shiny 生成 powerpoint 幻灯片

r - 如何从 RStudio 中的查看器将绘图保存为磁盘上的图像?

r - 使用 ReporteRs 包加载模板 .pptx 时出错

在 R 中将数据文件渲染为格式化的 Word 文档

xml - 在 R 中解析 iTunes RSS

r - 追加/合并形状文件

java - 设置文件不可用(Atu 记者)

arrays - R按行填充数组