将数据框的子集格式化为百分比并显示在 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))
目前我正在使用 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))