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

R - Coerce list objects using percent (formattable)

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

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])) 时,它按预期顺利运行。似乎 percent 不能立即强制 2D 数据。不过,想知道有没有什么方法可以避免循环,想出一个漂亮的解决办法

提前致谢。

我们需要遍历列

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

这可以通过 base R

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

对于这类任务我真的很喜欢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)