2017-04-21 31 views
2

我想要的小数点后的位数设置为1 我已经这样做了计算后设置的位数:无法使用十进制粘贴功能(R)

options(digits = 3) 
DT<-data.table(x=c("a","b","c",NA,"b","e"),v=rnorm(6)) 
ans<-DT[,lapply(.SD,function(x) length(which(is.na(x)))/length(x)*100)] 

现在,给人答我的NAS一列中的百分比:

x v 
    16.7 0 

但是,当我尝试使用添加百分比符号 “%”:

ans[,lapply(.SD, function(x) paste(x,"%",sep = ''))] 

小数点后面有:

    x v 
1: 16.6666666666667% 0% 

我在做什么错?我怎样才能得到这个输出?:

x v 
16.7% 0% 

谢谢。

+0

另外'round',如'ANS <-DT [,lapply(.SD,函数(x)的轮(长度( (is.na(x)))/ length(x)* 100,1))]'那么你的最后一步。请注意,'options(digits = 3)'控制打印的位数,而不是R为每个数字存储的位数。 – lmo

+0

有用的解释,谢谢。 –

回答

1

我们可以只使用sprintf通过将其转换到小数点后两位,并与%

DT[, lapply(.SD, function(x) sprintf("%0.1f%%", 100*sum(is.na(x))/.N))] 

串联或者我们可以用format

DT[, lapply(.SD, function(x) paste0(format(100*sum(is.na(x))/.N, digits = 3), "%"))] 
#  x v 
#1: 16.7% 0% 
1

你可以只使用round做:

paste0(round(ans,1),"%") 

其给出

[1] "16.7%" "0%" 

或改变OP的代码:

ans[,lapply(.SD, function(x) paste(round(x,1),"%",sep = ''))]