は、ここで私はdata.frameの一部として持っているブールのサンプルです:ブーリアンに基づいて一連の数値を返すよりエレガントな方法はありますか?
atest <- c(FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE)
私は数字のシーケンスが各FALSEから1から始まり、次のFALSEになるまで1ずつ増加返すようにしたいです。
結果として所望のベクターは、次のとおりです。
[1] 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1
はここでこれを達成したコードですが、私はいつもどのように学ぶことをしようとしているR.でこれを行うには単純以上のエレガントな方法があります確信しています単純に仕事を終わらせるのではなく、Rで物事をより効率的にコーディングすることができます。
result <- c()
x <- 1
for(i in 1:length(atest)){
if(atest[i] == FALSE){
result[i] <- 1
x <- 1
}
if(atest[i] != FALSE){
x <- x+1
result[i] <- x
}
}
forループ内でオブジェクトを再配置(「成長」)することは、Rでは大きな問題ではありません。できるだけ遅いことです。 –
私はサプリで試したことが分かっていますが、基本的なロジックを取り出そうとしていました。あなたのソリューションはまさに私が探していたものです。 – tcash21