说我们有以下数值向量:
y=c(0.111,1.11,11.1,111.1)
我希望将其舍入如下:
0.11,1.11,11.1,111
此规则很简单:我总共要三位数!但是,如果数字很大(例如1111或11111),则保留所有数字,但不保留小数。
当然,必须有一个更简单的解决方案?:
lapply(y,function(x){
ifelse(nchar(as.integer(x))<1,round(x,digits=3),
ifelse(nchar(as.integer(x))==1,round(x,digits=2),
ifelse(nchar(as.integer(x))==2,round(x,digits=1),
ifelse(nchar(as.integer(x))>2,round(x,digits=0)
))))
}
)
这项工作吗?
y <- c(0.111,1.11,11.1,111.1,1111,11111)
(ry <- gsub("0+$","",round(y*100)/100))
## [1] "0.11" "1.11" "11.1" "111.1" "1111" "11111"
as.numeric(ry)
## [1] 0.11 1.11 11.10 111.10 1111.00 11111.00
我通常不喜欢转换为字符的解决方案,但是它似乎可以完成您想要的...(请注意,此rounds可以根据需要进行,但是数字值的打印会重新包含零值:cat(ry,"\n")
将按原样打印数字)