代码从事件发生开始

时间:2012-08-21 19:47:54

标签: r

我有一个载体,随着时间的推移会出现/不存在事件(在这种情况下是叛乱),我想创建另一个给出事件开始的向量,即:

occurrence <- c(1, 1, 0, 0, 1, 0, 0, 1, 1, 1)
onset <- c(0, 0, 0, 0, 1, 0, 0, 1, 0, 0)

以下循环将获得我需要的东西:

answer <- 0
for (t in 2:length(occurrence) {
  answer[t] <- ifelse((occurrence[t]-occurrence[t-1])==1, 1, 0)
}

> answer
[1] 0 0 0 0 1 0 0 1 0 0

有更简单的方法吗?

感谢。

2 个答案:

答案 0 :(得分:0)

使用pmax()diff()

c(NA, pmax(0, diff(occurrence)))
 [1] NA  0  0  0  1  0  0  1  0  0

这是有效的,因为diff()计算了连续元素之间的差异,导致每次开始都1。然后,您需要删除0-1值。 pmaxmax()并行版本,可以方便地将所有-1s更改为零

diff(occurrence)
[1]  0 -1  0  1 -1  0  1  0  0

答案 1 :(得分:0)

您可以将之前的时间间隔与当前时间间隔进行比较,然后使用以下代码选择0之后的时间间隔:

> c(0, as.numeric(occurrence[-length(occurrence)] == 0 & occurrence[-1]==1) )
 [1] 0 0 0 0 1 0 0 1 0 0

(我用前导0填充它,因为你不想要发生前导:1被视为新事件。)