如何在指定容差下将数值向量的值匹配到目标整数向量?
向量按容差匹配目标整数的实现方案
给定输入向量:
input_vec <- c(0.399999999999977, 0.000399999999899592, 0, 0, 1.00239999999985)
需要将每个元素匹配到目标整数集合{0,1,2,3,4},匹配规则为:元素与目标整数的绝对差值≤0.1时视为匹配成功,无符合条件的整数则返回NA。预期输出为:
c(NA, 0, 0, 0, 1)
实现代码
# 定义输入向量、目标整数和容差 input_vec <- c(0.399999999999977, 0.000399999999899592, 0, 0, 1.00239999999985) target_ints <- 0:4 tolerance <- 0.1 # 自定义匹配函数 match_with_tol <- function(x, targets, tol) { diffs <- abs(x - targets) valid_matches <- targets[diffs <= tol] if (length(valid_matches) == 1) valid_matches else NA } # 应用函数得到结果 output_vec <- sapply(input_vec, match_with_tol, targets = target_ints, tol = tolerance) # 查看结果 output_vec
代码说明
- 核心逻辑:对每个输入元素,计算其与所有目标整数的绝对差值,筛选出差值≤容差的整数;
- 唯一性处理:由于目标整数间隔为1,容差设为0.1,每个元素最多只会匹配到一个目标整数,若没有符合条件的则返回
NA; - 运行结果:执行代码后会得到预期的
NA 0 0 0 1向量。
内容的提问来源于stack exchange,提问作者Pavel Shliaha
相关产品推荐
相关产品推荐

