我有一个载体,随着时间的推移会出现/不存在事件(在这种情况下是叛乱),我想创建另一个给出事件开始的向量,即:
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
有更简单的方法吗?
感谢。
答案 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
值。 pmax
是max()
的并行版本,可以方便地将所有-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被视为新事件。)