限制值为0.5的精确倍数,并将其他值替换为NA -不允许舍入

  • 本文关键字:其他 替换 舍入 不允许 NA r
  • 更新时间 :
  • 英文 :


我想知道如何将数字向量限制为精确的0.5步。舍入是不允许的。所有不是0.5的精确倍数的值都应替换为NA(它们是错误的数据条目)。

我认为我用sprintf转换成字符并使用表示来识别非.[0|5]0$的值的方法相当直接。然而,我对其他的想法很好奇。

x <- c(seq(0, 1.5, .5), .3, 1.01, 0.53)
x
#> [1] 0.00 0.50 1.00 1.50 0.30 1.01 0.53
## desired output
x[!grepl(".[0|5]0$", sprintf("%.2f", x))] <- NA
x
#> [1] 0.0 0.5 1.0 1.5  NA  NA  NA

刚刚发布,我意识到我也可以使用%%

x[!x%%.5 == 0] <- NA
x
#> [1] 0.0 0.5 1.0 1.5  NA  NA  NA

另一个可能的解决方案:

ifelse((x-trunc(x)) %in% c(0.0, 0.5), x, NA)
#> [1] 0.0 0.5 1.0 1.5  NA  NA  NA

最新更新