2013-07-29 6 views
1

나는이처럼 보이는 data.frame 있습니다주문 값 열에서 값을 대체

df <- data.frame(names=c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"), 
       values=c(1,1,4,6,7,7,7,9,9,14,15)) 

그리고이 비슷한 싶습니다 : 내가 아는

df <- data.frame(names=c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"), 
       values=c(1,1,2,3,4,4,4,5,5,6,7)) 

을 그것입니다 어리석은 질문 그러나 나는 그것을하는 방법을 모른다. 감사합니다

참고 :

df <- transform(df, values = cumsum(c(1, head(values, -1) != tail(values, -1)))) 

이해하기 쉬울 수 있습니다 또 다른 버전,하지만 조금 : 당신은 cumsum를 사용할 수있는 두 번째 data.frame의 값은 N

답변

7

1부터 순서대로해야한다 느린 것 같아요 것 :

df<- transform(df, values = cumsum(c(1, diff(values) != 0)) 
+1

+1 정말 멋진 방법! – Arun

+0

@flodel, 제 2 판은 이해하기 쉽습니다, 감사합니다 !!! – user2380782

4

df$values이 정렬되어 있다고 가정하면, 또 다른 방법은 table을 사용하는 것입니다.

tt <- table(df$values) 
rep(seq_along(tt), tt) 
# [1] 1 1 2 3 4 4 4 5 5 6 7 
+0

많은 감사합니다. 접근 방식도 매우 잘 작동합니다. – user2380782

1

또 다른 옵션은 고려하고 거기에서 순서를 추출 변환하는 것입니다 :이 작업을 수행하는

df$values = as.numeric(as.factor(df$values))