无法使用粘贴功能 (R) 设置小数点后的位数
unable to set number of digits after decimal using paste function (R)
我正在尝试将小数点后的位数设置为 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%
您可以只使用 round
并执行 :
paste0(round(ans,1),"%")
这给出了
[1] "16.7%" "0%"
或将 OP 的代码更改为:
ans[,lapply(.SD, function(x) paste(round(x,1),"%",sep = ''))]
我正在尝试将小数点后的位数设置为 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%
您可以只使用 round
并执行 :
paste0(round(ans,1),"%")
这给出了
[1] "16.7%" "0%"
或将 OP 的代码更改为:
ans[,lapply(.SD, function(x) paste(round(x,1),"%",sep = ''))]