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、すべての開始に対して結果を出すためです。0次に、との値を削除する必要があり-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で埋めました。)

于 2012-08-21T21:55:16.480 に答える