将数据框的子集格式化为百分比并显示在 flexdashboard 中

Formatting subset of a dataframe as percent and display in flexdashboard

目前我正在使用 flexdashboard 在 R 中开发仪表板。我正在使用不同的 Excel-/CSV-datasources 来生成 html 输出。 我的目标是在仪表板的页面中显示(作为仪表板的一部分)Excel-数据表。从 Excel-data 导入的数据框看起来(简化)如下:

 text_col <- c("A", "B", "C", "D")
 jan_col <- c(0.2, 0.3, 12, 0.4)
 feb_col <- c(0.1,0.2, 12.5, 0.8)
 dt <- data.frame("TEXT" = text_col, "JAN" = jan_col, "FEB" = feb_col)

现在我想在我的仪表板中有一个输出,其中小于 1 的数字被格式化为百分比。重要的是,数字 > 1(例如 12 和 12.5)以及文本(显然)未格式化为百分比。

到目前为止,我已经尝试 select 一个子集并使用 R 中的百分比函数覆盖这个子集。这适用于实际子集,但不会更新原始 table:

 library(dplyr)
 dt[c(1:2,4),c(2:3)] <- dt[c(1:2,4),c(2:3)] %>% mutate_each(list(percent))

有什么方法可以改变我想要以百分比格式设置的单元格吗?

在此先感谢您的帮助!

您可以使用 ifelse 来测试条件。

library(dplyr)
dt %>% mutate_at(-1, ~ifelse(. < 1, scales::percent(.), .))

或者如果您只想将 '%' 符号添加到数字

dt %>% mutate_at(-1, ~ifelse(. < 1, paste0(., '%'), .))

您也可以在 base R 中执行此操作:

dt[-1] <- lapply(dt[-1], function(x) ifelse(x < 1, paste0(x, '%'), x))