【发布时间】:2015-12-19 02:44:05
【问题描述】:
我有两个序列。它们是以秒为单位的时间。我想知道序列 b 中的哪些值出现在序列 a 中任何值的 10 秒内。
seqa = c(4.53333333333333, 7.43333333333334, 9.03333333333333, 20.6166666666667,
20.6333333333333, 42.5666666666667, 48.3166666666667, 48.8, 49.75,
55.1, 56.7833333333333, 59.3833333333333, 110.15, 113.95, 114.6)
seqb = c(18.3833333333333, 18.3833333333333, 63.8833333333333, 72.3166666666667,
76.7166666666667, 85.2166666666667, 91.25, 91.3666666666667,
96.2833333333333)
我使用两个for 循环完成了这项工作。遍历seqb 的每个元素并测试它是否出现在大于seqa 的每个值但在10 秒限制内的时间。
matX <- matrix(nrow=length(seqa), ncol=length(seqb))
for(j in seq_along(seqb)){
for(i in seq_along(seqa)){
test1 <- seqb[j]>=seqa[i]
test2 <- seqb[j]<=seqa[i]+10
matX[i,j] <- sum(test1 + test2)
}
}
matX
我将结果存储在矩阵中。您可以在第 1、2 和 3 列中看到 2 的值。
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 1 1 1 1 1 1 1 1 1
[2,] 1 1 1 1 1 1 1 1 1
[3,] 2 2 1 1 1 1 1 1 1
[4,] 1 1 1 1 1 1 1 1 1
[5,] 1 1 1 1 1 1 1 1 1
[6,] 1 1 1 1 1 1 1 1 1
[7,] 1 1 1 1 1 1 1 1 1
[8,] 1 1 1 1 1 1 1 1 1
[9,] 1 1 1 1 1 1 1 1 1
[10,] 1 1 2 1 1 1 1 1 1
[11,] 1 1 2 1 1 1 1 1 1
[12,] 1 1 2 1 1 1 1 1 1
[13,] 1 1 1 1 1 1 1 1 1
[14,] 1 1 1 1 1 1 1 1 1
[15,] 1 1 1 1 1 1 1 1 1
out <- apply(matX, 2, function(x) any(x>=2))
seqb[out]
# [1] 18.38333 18.38333 63.88333
这些值是在seqa 中至少一个值的 10 秒内出现的值。 (前两个出现在 9.03333 的 10 秒内,第三个值 63.8333 出现在三个 seqa 值(55.1、56.78333、59.38333)的 10 秒内。
我正在尝试加快速度,因为我将对大约 2000 个元素的序列进行一些随机化。任何想法都非常感谢。
【问题讨论】:
标签: r