Utilizzare la funzione indicata con ave
:
uniquify <- function(x) if (length(x) == 1) x else sprintf("%s%02d", x, seq_along(x))
ave(init, init, FUN = uniquify)
## [1] "AA" "AB01" "AB02" "AB03" "AC"
Se il requisito fondamentale è solo quello di garantire uscita univoco quindi make.unique(x)
o make.unique(x, sep = "0")
come discusso da un'altra risposta e commenti sono concisa ma se il requisito è che l'uscita essere esattamente come nella domanda quindi non danno lo stesso risultato. Se ci sono 10 o più duplicati l'output di quelle risposte varia ancora di più; tuttavia, la soluzione qui dà la stessa risposta. Ecco un ulteriore esempio che illustra 10 o più duplicati.
xx <- rep(c("A", "B", "C"), c(1, 10, 2))
ave(xx, xx, FUN = uniquify)
## [1] "A" "B01" "B02" "B03" "B04" "B05" "B06" "B07" "B08" "B09" "B10" "C01" "C02"
La soluzione make.unique poterono essere salvati in questo modo:
fonte
2016-01-28 13:42:14
Buon punto, make.unique dà una brutta miscela di B e B.X in questo caso. –
@akrun: Ci scusiamo per aver rimosso la soluzione. –