このロジックを、forループではなく純粋な行列演算で変換したいと思います。論理は、私のバイナリ値ベクトルで、すべての遷移点(つまり、0が1に変わり、1が0に変わる場所)に注意したいということです。それ以外の場合は、元の値を保持したいと思います。単純なループは小さなベクトルには十分高速ですが、大きなデータセットに対してこの操作を数回実行する必要があるため、マトリックスを介した効率が必要です。
x <- c(1,0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,0,1);
y <- rep(-2, length(x));
y[1] <- x[1];
for(i in 2:length(x)){
if((x[i]==1 && x[i-1]==0) || (x[i]==0 && x[i-1]==1)){
y[i] = -1;
}
else{
y[i] = x[i];
}
}
yの最終値は1-10 0 0 -1 1 -1 0 -1 -1 -1 -1 -1 -1 0 0 -1
私はRへの新しい改宗者です、事前に感謝します