如何查找特定数值在递增numeric vector中的相对位置?
实现递增数值向量的位置查找函数
给定一个递增排列的数值向量,示例如下:
vec <- c(13.5, 13.9, 14.2, 14.5, 14.8, 15.2, 16.0, 16.9, 17.4, 17.8, 18.3, 18.7, 19.4)
需求是写一个函数f(),输入目标数字后返回其在向量中的相对位置,效果示例:
- 输入
f(13, vec),返回'< 13.5' - 输入
f(15.0, vec),返回'14.8 <= x < 15.2'
函数实现
f <- function(x, vec) { idx <- findInterval(x, vec) if (idx == 0) { paste0('< ', vec[1]) } else if (idx == length(vec)) { paste0(vec[length(vec)], ' <= ') } else { paste0(vec[idx], ' <= x < ', vec[idx + 1]) } }
测试验证
# 初始化示例向量 vec <- c(13.5, 13.9, 14.2, 14.5, 14.8, 15.2, 16.0, 16.9, 17.4, 17.8, 18.3, 18.7, 19.4) # 测试小于最小元素的情况 f(13, vec) # 输出: "< 13.5" # 测试中间区间的情况 f(15.0, vec) # 输出: "14.8 <= x < 15.2" # 测试等于最大元素的情况 f(19.4, vec) # 输出: "19.4 <= " # 测试大于最大元素的情况 f(20, vec) # 输出: "19.4 <= "
逻辑说明
- 借助R内置的
findInterval()函数快速定位目标值在有序向量中的区间索引,该函数针对有序向量做了优化,查找效率高 - 根据索引值判断三种场景:目标小于所有元素、目标处于两个元素之间、目标大于等于最后一个元素
- 用
paste0()拼接成符合要求的字符串格式
内容的提问来源于stack exchange,提问作者Peong Gang Park
相关产品推荐
相关产品推荐

