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)
我想使用 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)