2016-10-17 10 views
2

제 질문은 아래에있는 것과 매우 유사합니다. 그러나 시퀀스에 2 개 이상의 연속 값이있는 경우에만 반환하는 추가 명령을 추가하고 싶습니다.dplyr 및 rle을 사용하여 조건이있는 그룹의 연속 값을 계산하십시오.

주어진 시퀀스 실행에 주어진 연대와 주어진 연도 내에서 연속 된 숫자가 두 개 이상 연속 될 때 연속 된 "성공"수를 계산합니까?

비슷한 질문 : 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