为重复行分配唯一值

6

我想在R中通过ID为每个重复的行分配值

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

我希望输出结果如下,通过ID检查重复项,然后将第二个重复项指定为_1,以此类推...
   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
2个回答

9
您可以按照以下方式使用R基础包中的make.unique函数:
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,sep="_") ) - thelatemail

3
或者使用 dplyr
library(dplyr)
df %>% 
    group_by(ID) %>% 
    mutate(Code_n = make.unique(as.character(Code)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接