将百分比值传递给数据框时保留百分比格式

时间:2016-08-18 12:51:04

标签: r formatting

我编写了一个产生百分比值的函数。当我将值传递给数据帧时,格式化将丢失;例如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)

因此我想知道是否有:

  • 一种在传递给数据框时保持值的百分比格式的方法,对于后者,它没有事先指定格式是什么;或者,
  • 将百分比格式分配给数据框的大量列的有效方法

1 个答案:

答案 0 :(得分:0)

正如@hrbrmstr指出的那样,我必须使用scales::percent()来使我的代码工作。要获得两位数,我可以scales::percent(round(x,4))formattable::percent(x, 2)。指定namespacescalesformattable)可以使用蒙版包中的函数。