【问题标题】:Code onset from event occurrence事件发生的代码开始
【发布时间】:2012-08-21 19:47:53
【问题描述】:

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

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

有没有更简单的方法?

谢谢。

【问题讨论】:

    标签: r


    【解决方案1】:

    使用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
    

    【讨论】:

      【解决方案2】:

      您可以将之前的时间间隔与当前的时间间隔进行比较,然后使用以下代码选择 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 被计为新事件。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-23
        • 1970-01-01
        • 2020-06-01
        相关资源
        最近更新 更多