2014-04-11 3 views
0

데이터 프레임의 새 열에 일련의 숫자를 제공하고 싶습니다. 그러나이 순서는 다른 열의 값에 따라 여러 번 반복됩니다. 즉, 특정 값이 다른 값으로 변경 될 때까지 1부터 시작합니다.r에있는 데이터 프레임의 열에 특정 끝이없는 일련 번호가 입력되었습니다.

제 문제는 r의 각 시퀀스에 대한 끝점을 정의하는 방법입니다.

내가 추가하려는 열 "V2"내 데이터 프레임의 일부 : 나는 작동하지 않은 다음 코드를 사용하려고

V1  V2(new added column with sequential numbers)   
    12  1 
    12  2 
    12  3 
    12  4 
    12  5 
    13  1 
    13  2 
    13  3 
    13  4 
    13  5 
    13  6 
    14  1 
    14  2 
    14  3 
    14  4 

! 당신이 변수 "V1"은 변경 언제든지에 관심이 있기 때문에 당신이 rle을 찾는 수 있습니다처럼

count <- table(df$V1) 
c <- as.integer(names(count)[df$V1==12]) 
    repeat{ 
     df$V2<- seq(1,c, by=1) 
     if(df$V1!=12){ 
     break 
     } 
    } 

답변

1

는 소리가 난다.

> sequence(rle(df$V1)$lengths) 
[1] 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4 
+0

감사합니다. 흥미롭게도, wor ks. 나는 지금 구름 9에있다!이 문제를 해결하는 데 많은 시간이 걸렸기 때문에! – MASUMEH

0

잘 아난다 내 노력 친다 :

vec = numeric(0) 
for(i in unique(df$V1)){ 
    n = length(df$V1[df$V1 == i]) 
    vec = c(vec, 1:n) 
} 
+0

너무 고마워. – MASUMEH

0

RLE 아주 좋은 솔루션을하지만 당신은 또한 아베 사용할 수도 :

tab$V2 <- ave(tab$V1, tab$V1, FUN=seq_along) 

HTH를

는 다음 시도

+0

'ave'와'rle' (그리고'ave'을 제안하지 않은 이유) 사이에는 차이가 있습니다. 그들의 질문은 하나의 가치에서 다른 가치로의 변화를 언급합니다. 이렇게하면 시퀀스가 ​​끊어져도 실행중인 시퀀스가 ​​생성됩니다. – A5C1D2H2I1M1N2O1R2T1

+0

예 숫자가 연속되는 경우에만 작동한다는 것은 사실입니다. – droopy

관련 문제