2013-07-16 3 views
-1

시간이 지남에 따라 이진 신호 버스트의 데이터 테이블이 있습니다. 신호 버스트는 임의의 길이입니다. 그래서 나는 0에서 1 (시작점)의 변화가있는 행 인덱스와 1에서 0 (끝점)의 변화가 일어나는 행 인덱스를 찾아야한다. 그래서 결국 각 신호 버스트의 시작과 끝 시간을 찾을 수 있습니다.값 변경/신호 스위치의 행 인덱스 찾기

어떻게하면됩니까?

+0

아마 rle''로. 그러나 더 나은 조언을 얻으려면 몇 가지 예제 데이터를 제공하고 제안 [여기] (http://stackoverflow.com/q/5963269/210673)을 참조하십시오. – Aaron

답변

1

의견에서 언급 한대로 diff 또는 rle을 사용할 수 있습니다. 그러나 당신은 제공해야

  1. 신호 예를 들어 당신은 무엇을

    set.seed(1) 
    rr <- rbinom(30,1,0.5) 
    
  2. 를 시도? 예를 들어 diff 사용하여 나는 다음과 같은

    ind <- c(0,diff(rr)) 
    
  3. 예상 출력을합니까?

    start <- min(which(ind==1)) ## change from 0 to 1 (the start point) 
    end <- max(which(ind==-1)) ## change of 1 to 0 (the end point) 
    
2

은 데이터를 가정하면 다음과 같습니다 : 나는이 작업을 수행합니다

R> x 
     V1 V2 V3 V4 V5 
[1,] 0 0 0 0 1 
[2,] 0 1 0 0 1 
[3,] 1 1 0 0 1 
[4,] 1 1 0 0 1 
[5,] 1 1 1 0 1 
[6,] 1 1 1 0 1 
[7,] 1 1 1 0 0 
[8,] 1 1 1 0 0 
[9,] 1 1 1 0 0 
[10,] 1 1 1 1 0 
[11,] 1 0 1 1 0 
[12,] 1 0 1 1 0 
[13,] 1 0 1 1 0 
[14,] 1 0 1 1 0 
[15,] 1 0 1 1 0 
[16,] 1 0 1 1 0 
[17,] 1 0 1 1 0 
[18,] 0 0 1 1 0 
[19,] 0 0 1 0 0 
[20,] 0 0 1 0 0 

:

apply(x, 2, 
     function (k) { 
     w <- which(k == 1, arr.ind=TRUE) 
     c(head(w, 1), tail(w, 1)) 
     }) 

    V1 V2 V3 V4 V5 
[1,] 3 2 5 10 1 
[2,] 17 10 20 18 6