2017-02-14 15 views
5

chcę przypisać wartość dla każdego skopiowanego rzędu przez ID w RPrzypisywanie wyjątkowa wartość dla zduplikowanych wierszy

df <- data.frame(ID=c(1,1,1,2,2,2,2,2,3,3,4), 
      Code = c("A","A","A","B","B","C","C","D","A","A","C")) 
> df 
    ID Code 
1 1 A 
2 1 A 
3 1 A 
4 2 B 
5 2 B 
6 2 C 
7 2 C 
8 2 D 
9 3 A 
10 3 A 
11 4 C 

Chcę wyjście tak, sprawdź powielane przez ID, a następnie przypisać drugi duplikat _1 i tak na ...

ID Code Code_n 
1 1 A  A 
2 1 A A_1 
3 1 A A_2 
4 2 B  B 
5 2 B B_1 
6 2 C  C 
7 2 C C_1 
8 2 D  D 
9 3 A  A 
10 3 A A_1 
11 4 C  C 

Odpowiedz

9

można użyć make.unique od podstawy R następująco,

with(df, ave(as.character(Code), ID, FUN = make.unique)) 
#[1] "A" "A.1" "A.2" "B" "B.1" "C" "C.1" "D" "A" "A.1" "C" 
+4

'ave (as.character (df $ Kodeksu), df $ ID, zabawa = function (x) make.unique (x, wrzesień = "_"))' jeśli podkreślenia są bardzo ważne. – thelatemail

1

lub przy użyciu dplyr

library(dplyr) 
df %>% 
    group_by(ID) %>% 
    mutate(Code_n = make.unique(as.character(Code))) 
Powiązane problemy