2016-04-01 6 views
2

ベクトル内のTRUEの値の数を調べようとしている間に、最初のGoogle hitが見つかりました。しかし、これは私の要件を完全に満たしていません。私は最初のFALSEの前にベクター内のTRUEの値の数を見つけることに興味があります。私はベクトルa <- c(TRUE,TRUE,TRUE,FALSE,TRUE, TRUE)を持っており、FALSEの前にすべてTRUEの値を見つけたいので、出力は3になります。ベクトルにTRUEの値しかない場合にも機能するはずです。ここFALSEの前に論理ベクトル内のTRUE値の数を数える方法

答えて

8

は短いようである:

cumprod(この場合は0と1の)累積生成物を得る
sum(cumprod(a)) 
# [1] 3 

。したがって、最初のFALSEの後にTRUEのすべてが削除されます。

+0

とても素敵!おかげで –

2

怒鳴るのステートメントを使用しても、我々はeasyly取得...

which.min(a)-1 
+0

は、 'cumprod()'に基づく解決策より大きなベクトルではやや速いです。意図的に悪い例では、 'a < - rep(c(TRUE、FALSE、TRUE)、c(42,1,1e8))'の2つの解を比較してください。 –

+0

このメソッドは、TRUE値のみを含むベクトルでは機能しません。 'TRUE、FALSE'の組み合わせに対してのみ有効 –

+0

OK、その後に別の' if() 'チェックが必要です。結果が '0'なら' length(a) 'に変更する必要があります。これを非常に多くの時間または非常に大きなデータに適用する必要がある場合は、タイミングはまだ改善されます。便利な関数としてこれを必要とすれば、 'cumprod()'に基づく1行の解法は、より速くタイプ/記憶することができます。 –

関連する問題