我正在尝试将十进制后的位数设置为1。
我已经做了这个计算:

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)]

现在,ans给我列中NA的百分比:
  x v
  16.7 0

但是,当我尝试在百分比符号“%”中添加以下内容时:
ans[,lapply(.SD, function(x) paste(x,"%",sep = ''))]

十进制数字回到那里:
                    x   v
1: 16.6666666666667% 0%

我究竟做错了什么?如何获得此输出?:
 x v
 16.7% 0%

谢谢。

最佳答案

我们可以通过将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%

关于r - 无法使用粘贴功能(R)设置小数点后的位数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43542649/

10-14 20:23