2017-02-14 27 views
5

Tôi muốn gán giá trị cho mỗi hàng nhân đôi bởi ID trong RGán giá trị duy nhất cho các hàng trùng lặp

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 

Tôi muốn đầu ra như thế này, kiểm tra nhân đôi bởi ID, sau đó gán những bản sao thứ hai _1 và do đó trên ...

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 

Trả lời

9

Bạn có thể sử dụng make.unique từ cơ sở R như sau,

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 $ Code), df $ ID, FUN = function (x) make.unique (x, tháng chín = "_")) 'nếu gạch chân là những siêu quan trọng. – thelatemail

1

Hoặc sử dụng dplyr

library(dplyr) 
df %>% 
    group_by(ID) %>% 
    mutate(Code_n = make.unique(as.character(Code))) 
Các vấn đề liên quan