R计算每个值在我的向量中有多少其他数字在指定的thresold下

时间:2016-05-19 09:25:26

标签: r

我有一个载有大约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组)

由于

1 个答案:

答案 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+winpos之间的元素数量。需要因子1+.Machine$double.eps来处理边缘情况(tx到@DavidArenburg)。