我想知道如何将数字向量限制为精确的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