2016-10-17 10 views
2

私の質問は以下のようなものですが、シーケンスに2つ以上の連続した値がある場合のケースだけを返すコマンドを追加します。dplyrとrleで条件付きグループ内の連続値をカウントする

与えられたシーケンス実行に2つ以上の連続した数字がある場合、与えられた年と指定された年の中で、連続した「成功」の数をカウントするにはどうすればよいですか?

同様の質問:Summarize consecutive failures with dplyr and rle 。私は今、必要なのは、> 2の順番で連続した番号の場合のみが含まれるように条件を追加することです

library(dplyr) 
df <- data.frame(Era=c(1,1,1,1,1,1,1,1,1,1),Year = c(1,2,2,3,3,3,3,3,3,3), consec = c(0,0,1,0,1,1,0,1,1,1)) 

df %>% 
    group_by(Era,Year) %>% 
    do({tmp <- with(rle(.$consec==1), lengths[values]) 
     data.frame(Year= .$Year, Count=(length(tmp)))}) %>% 
    slice(1L) 

> Source: local data frame [3 x 3] 
> Groups: Era, Year 

> Era Year Count 
> 1 1 1  0 
> 2 1 2  1 
> 3 1 3  2 
> 

:比較のために、私はその質問に使用される例を変更しました。希望の結果:

> Source: local data frame [3 x 3] 
> Groups: Era, Year 

> Era Year Count 
> 1 1 1  0 
> 2 1 2  0 
> 3 1 3  1 

アドバイスをいただければ幸いです。

答えて

2

は、我々はlengthsと論理インデックスを作成し、取得する必要があり、それのsum

df %>% 
    group_by(Era, Year) %>% 
    do({ tmp <- with(rle(.$consec), sum(lengths > 2)) 
    data.frame(Count = tmp)}) 
# Era Year Count 
# <dbl> <dbl> <int> 
#1  1  1  0  
#2  1  2  0 
#3  1  3  1