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