2017-11-08 5 views
0

data.frame의 중복 행 번호 매기기에 문제가있어서 비슷한 게시물을 찾을 수 없습니다.dplyr에서 중복 행의 번호 매기기

의 우리가이

df <- data.frame(gr=gl(7,2),x=c("a","a","b","b","c","c","a","a","c","c","d","d","a","a")) 


    > df 
    gr x 
1 1 a 
2 1 a 
3 2 b 
4 2 b 
5 3 c 
6 3 c 
7 4 a 
8 4 a 
9 5 c 
10 5 c 
11 6 d 
12 6 d 
13 7 a 
14 7 a 

같은 데이터를 가지고 x 값의 첫 번째 항목은 번호가 있음을 보여 x_dupl라는 새 열을 추가 할 가정 해 봅시다 시간 2 등 세 번째 31 등 및 초 ..

미리 감사드립니다!

예상 출력

> df 
      gr x x_dupl 
     1 1 a 1 
     2 1 a 1 
     3 2 b 1 
     4 2 b 1 
     5 3 c 1 
     6 3 c 1 
     7 4 a 2 
     8 4 a 2 
     9 5 c 2 
     10 5 c 2 
     11 6 d 1 
     12 6 d 1 
     13 7 a 3 
     14 7 a 3 
+0

@RonakShah 죄송합니다. 방금 깨달았 어. 업데이트 된 OP를 참조하십시오. – Alexander

+0

예상되는 출력의 행이 입력보다 많습니까? – neilfws

+0

@neilfws 죄송합니다. 나는 또한 그것을 잊어 버렸다 :) – Alexander

답변

2

귀하의 예제 데이터 (플러스 행 ​​gr = 7 당신의 출력 등), 및 df1 명명되지 df :

df1 <- data.frame(gr = gl(7,2), 
        x = c("a","a","b","b","c","c","a","a","c","c","d","d","a","a")) 

library(dplyr) 
df1 %>% 
    group_by(x) %>% 
    mutate(x_dupl = dense_rank(gr)) %>% 
    ungroup() 

# A tibble: 14 x 3 
     gr  x x_dupl 
    <fctr> <fctr> <int> 
1  1  a  1 
2  1  a  1 
3  2  b  1 
4  2  b  1 
5  3  c  1 
6  3  c  1 
7  4  a  2 
8  4  a  2 
9  5  c  2 
10  5  c  2 
11  6  d  1 
12  6  d  1 
13  7  a  3 
14  7  a  3 
1

베이스 R 솔루션 :

df <- data.frame(gr=gl(7,2),x=c("a","a","b","b","c","c","a","a","c","c","d","d","a","a")) 

x <- rle(as.numeric(df$x)) 
x$values <- ave(x$values, x$values, FUN = seq_along) 
df$x_dupl <- inverse.rle(x) 
# gr x x_dupl 
# 1 1 a  1 
# 2 1 a  1 
# 3 2 b  1 
# 4 2 b  1 
# 5 3 c  1 
# 6 3 c  1 
# 7 4 a  2 
# 8 4 a  2 
# 9 5 c  2 
# 10 5 c  2 
# 11 6 d  1 
# 12 6 d  1 
# 13 7 a  3 
# 14 7 a  3