【发布时间】:2016-07-28 21:50:43
【问题描述】:
让T={t|t=1,2,3..T} 为时间(序列号)对于每个组,在每个t 时/如果发生序列,我们需要确定序列(它是一个数字,假设它是@987654323 @) 在 {K-1,K,K+1} 的集合中,其中K 是t-1 的前一个序列号。例如,如果前一个序列号K=4,对于下一个序列X,如果X落在[3,4,5]之内。那么这个 X 满足要求。如果序列中的每个 X 都满足要求,则该组满足要求并将其标记为 TRUE。
我知道 for 循环可以解决问题,但我有大量观察,在循环中执行它非常慢。我知道cummax 可以帮助快速找到非递减序列。我想知道有没有像cummax 这样的快速解决方案。
seq <- c(1,2,1,2,3,1,2,3,1,2,1,2,2,3,4)
group <- rep(letters[1:3],each=5)
dt <- data.frame(group,seq)
> dt
group seq
1 a 1
2 a 2
3 a 1
4 a 2
5 a 3
6 b 1
7 b 2
8 b 3
9 b 1
10 b 2
11 c 1
12 c 2
13 c 2
14 c 3
15 c 4
想要的输出:
y label
a:true
b:false
c:true
【问题讨论】:
标签: r data.table dplyr