取以下 vector x
。
x <- c(50.333, 195.333, 186, 214.333, 246.667)
x
的小数位将为,始终为零,1/3或2/3(即0.0、0.333或0.667)之一。我想快速将其各自的小数更改为以下结果> round(x %% 1/3, 1)
[1] 0.1 0.1 0.0 0.1 0.2
意思是,用
x
目前,我正在笨拙地转换为字符,然后返回数字以得到以下所需结果...
> as.numeric(paste0(round(x, 0), sub("0", "", round(x %% 1/3, 1))))
[1] 50.1 195.1 186.0 214.1 247.2
是否有数学方法可以做到这一点而不必强迫角色?
最佳答案
我借鉴了您以前的努力,并取得了一些良好的效果:
x <- c(50.333, 195.333, 186, 214.333, 246.667)
stripDecimal <- function(x){
y <- as.integer(x)
z <- round(x %% 1/3, 1)
y+z
}
stripDecimal(x)
[1] 50.1 195.1 186.0 214.1 246.2
关于r - 重新格式化数值而不强制使用字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25344123/