2014-12-07 2 views
3

임에 새롭고 y의 길이를 결정할 때 y = 1까지 문제가 발생합니다. 주어 샘플 :y 길이를 측정하는 방법?

  id<-c(1, 1, 1, 1, 1, 1, 1, 2, 2,2,2,2,2,2) 
     y<-c(0, 0, 0, 0, 1, 0, 1, 1, 0,0,0,0,0,1) 
     time<-c(1, 2, 3,4, 5, 6, 7, 1, 2,3,4,5,6,7) 

데이터 < -data.frame (ID, Y 시간)

 id y time desired lenght 
     1 0 1   1 
     1 0 2   2 
     1 0 3   3 
     1 0 4   4 
     1 1 5   1 
     1 0 6   2 
     1 1 7   1 
     2 1 1   1 
     2 0 2   1 
     2 0 3   2 
     2 0 4   3 
     2 0 5   4 
     2 0 6   5 
     2 1 7   1 
+0

두 개의 데이터 표현이 일치하지 않습니다. 당신은 다른'y' 벡터를 가지고 있습니다. 또한 결과는 id = 2에 대해서는 의미가 없습니다. 당신은'y = 1'과'time = 1'을 가지고 있지만'time = 1'과'time = 2'에서 여러분은 원하는 값인 "1"을가집니다. 'time = 2'에서 거리는 2가되어야합니다. – MrFlick

+0

네, 죄송합니다. 그것을 바로 잡았다. –

답변

3

y=1의 길이가 1이 아닌 0이지만 경우이어야하는 비트 홀수 보인다 원하는대로 할 수 있습니다.

data$desired <- unlist(with(rle(data$y), 
    Map(function(l,v) 
     if(v==1) rep(1, l) else seq.int(l), 
    lengths, values)) 
) 
data 

# id y time desired 
# 1 1 1 1  1 
# 2 1 0 2  1 
# 3 1 0 3  2 
# 4 1 0 4  3 
# 5 1 1 5  1 
# 6 1 0 6  1 
# 7 1 1 7  1 
# 8 2 1 1  1 
# 9 2 0 2  1 
# 10 2 0 3  2 
# 11 2 0 4  3 
# 12 2 0 5  4 
# 13 2 0 6  5 
# 14 2 1 7  1 
+0

그 workx 정확히 내가 어떻게 상상했다. 고맙습니다. –

+2

'rle' -'R' 도구의 스위스 군용 칼 :-). –

관련 문제