首页 > 解决方案 > 查找数字是否在范围列表中的最快方法是什么?

问题描述

我对 R 真的很陌生,我一直在寻找一种简单快捷的方法来检查一个数字是否在一个范围列表内。例如:

Numbers <- c(77,3,66)
RangesList <- data.frame(cbind(c(5,20,33,60,91),c(8,23,45,76,100)))
colnames(RangesList) <- c("Start","End")

> RangesList

  Start End
1     5   8
2    20  23
3    33  45
4    60  76
5    91 100

现在我正在寻找一种简单快捷的方法(尽可能避免“如果”)来检查“数字”中的每个数字是否在 RangesList 中的某个范围内。在上面的例子中,我希望函数的结果是: "FALSE" "FALSE" "TRUE" 我需要在 100k 行上应用这个函数,而我的范围列表大约有 2000 行——这就是为什么我要强调运行时的影响(运行时使用“if”大约需要 5 分钟),我正在寻找一个更“优雅”的解决方案。

谢谢 :)

标签: rrangeapply

解决方案


这是使用方法sapply

sapply(Numbers, function(x) any(x >= RangesList$Start & x <= RangesList$End))
#[1] FALSE FALSE  TRUE

推荐阅读