我编写了一个产生百分比值的函数。当我将值传递给数据帧时,格式化将丢失;例如99.90%将变为0.9990。一些简单的代码来说明这一点(第一列表示我不想要所有列中的百分比):
DT = data.frame(matrix(0,nrow=1,ncol=5), stringsAsFactors = FALSE)
DT[1,1] = 100
DT[1,2:5] = percent(c(0.9999,0.4567,0.3256,0.7777))
DT
X1 X2 X3 X4 X5
1 100 0.9999 0.4567 0.3256 0.7777
我注意到,为了保持格式化百分比,我需要提前格式化数据框。但是,我只能逐列
这样做这有效:
DT[,2] = percent(DT[,2])
DT[,3] = percent(DT[,3])
...
但这有点乏味。不幸的是,下面两行都会产生相同的错误
DT[,c(2,3,4,5)] = percent(DT[,c(2,3,4,5)])
DT[,2:5] = percent(DT[,2:5])
Error in UseMethod("percent") :
no applicable method for 'percent' applied to an object of class "data.frame"
这也不起作用:
DT[,2:5] = apply(DT[,2:5],MARGIN = 2 ,FUN=percent)
因此我想知道是否有:
答案 0 :(得分:0)
正如@hrbrmstr指出的那样,我必须使用scales::percent()
来使我的代码工作。要获得两位数,我可以scales::percent(round(x,4))
或formattable::percent(x, 2)
。指定namespace
(scales
或formattable
)可以使用蒙版包中的函数。