R - 使用百分比强制列出对象(格式化)

时间:2017-12-21 09:15:59

标签: r formattable

我想使用percent包中的formattable将数据集强制转换为百分比形式。处女数据集如下所示:

C1 C2  C3  C4
a  .01 .03 .3
b  .3  .5  .7

预期结果(忽略小数):

C1 C2  C3  C4
a  1%  3%  30%
b  30% 50% 70%

现在,我尝试过(列数可能会有所不同,但只有C1会有字符):

DF[, c(2:ncol(DF))] <- percent(DF[, c(2:ncol(DF))])

显示错误:

Error in as_numeric(x) : (list) object cannot be coerced to type 'double'

现在,当我按列方式尝试使用循环(percent(DF[, i]))时,它按预期顺利运行。似乎百分比不能同时强制2D数据。但是,我想知道是否有办法避免循环并提出一个漂亮的解决方案。

提前致谢。

2 个答案:

答案 0 :(得分:2)

对于这类任务,我非常喜欢dplyr::mutate_if

library(dplyr)
library(formattable)
DF %>% mutate_if(is.numeric, percent)

如果不是所有这些都应该转换为%(例如,因为不是介于0和1之间的值),您可以将其扩展为:

DF %>% mutate_if(function(x){all(between(x, 0, 1))}, percent)

答案 1 :(得分:1)

我们需要遍历列

library(formattable)
df1[-1] <- lapply(df1[-1], percent)

可以使用base R

完成此操作
df1[-1] <- lapply(df1[-1], function(x) paste0(x *100, "%"))