我有一个载有大约50,000个数字的向量。我想为每个值计算我的向量中有多少其他数字< =指定的thresold。然后返回最大值。
现在我正在做
n <- 50000
s <- 100000
win <- 1000 # my thresold
pos <- sample(s,n,replace=T)
m <- max(sapply(pos,function(x){sum(abs(pos-x)<=win)}))
但它非常慢......我需要做N = 1,000,000次(模拟)。有什么想加快这件事吗?
以下是我想要的一个例子:
让我们说
pos <-c(2,6,20,23,24,56,64,75,95,100)
对于pos中的每个值,我可以计算在win = 20的最小距离处有多少个向量。 所以:
2 : 2,6,20
6 : 2,6,20,23,24
20: 2,6,20,23,24
23: 6,20,23,24
24: 6,20,23,24
56: 56,64,75
64: 56,64,75
75: 56,64,75,95
95: 75,95,100
100: 95,00
我想要这些子集的最大长度= 5(第6组和第20组)
由于
答案 0 :(得分:2)
试试这个:
#you need to sort the vector before
#(take a copy if you don't want to lose the original)
pos<-sort(pos)
findInterval(pos+win,pos) - findInterval(pos-win,pos*(1+.Machine$double.eps))
最后一行应该为pos-win
的每个元素提供pos+win
和pos
之间的元素数量。需要因子1+.Machine$double.eps
来处理边缘情况(tx到@DavidArenburg)。