无法使用粘贴功能 (R) 设置小数点后的位数

La *_*ale 4 r decimal paste

我试图将小数点后的位数设置为 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)]
Run Code Online (Sandbox Code Playgroud)

现在, ans 给我列中 NA 的百分比:

  x v
  16.7 0
Run Code Online (Sandbox Code Playgroud)

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

ans[,lapply(.SD, function(x) paste(x,"%",sep = ''))]
Run Code Online (Sandbox Code Playgroud)

十进制数字又回到了那里:

                    x   v
1: 16.6666666666667% 0%
Run Code Online (Sandbox Code Playgroud)

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

 x v
 16.7% 0%
Run Code Online (Sandbox Code Playgroud)

谢谢你。

akr*_*run 5

我们可以sprintf通过将其转换为两位小数并与%

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

或者我们可以使用 format

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


Ara*_*s7d 5

您可以使用round并执行以下操作:

paste0(round(ans,1),"%")
Run Code Online (Sandbox Code Playgroud)

这使

[1] "16.7%" "0%"   
Run Code Online (Sandbox Code Playgroud)

或将 OP 的代码更改为:

ans[,lapply(.SD, function(x) paste(round(x,1),"%",sep = ''))]
Run Code Online (Sandbox Code Playgroud)