0

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

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

有没有更简单的方法来做到这一点?

谢谢。

4

2 回答 2

0

使用pmax()diff()

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

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

diff(occurrence)
[1]  0 -1  0  1 -1  0  1  0  0
于 2012-08-21T20:02:04.327 回答
0

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

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

(我用前导 0 填充它,因为您不希望前导出现:1 被计为新事件。)

于 2012-08-21T21:55:16.480 回答