0

我想使用percentfrom formattablepackage 将数据集强制转换为百分比形式。原始数据集如下所示:

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 数据。但是,我想知道是否有办法避免循环并提出一个漂亮的解决方案。

提前致谢。

4

2 回答 2

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)
于 2017-12-21T09:56:02.817 回答
1

我们需要遍历列

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

这可以通过base R

df1[-1] <- lapply(df1[-1], function(x) paste0(x *100, "%"))
于 2017-12-21T09:20:44.543 回答