ave
と指示された機能を使用し:基本的な要件は別の答えとコメントで述べたようにちょうどそのmake.unique(x)
かmake.unique(x, sep = "0")
をユニークな出力を確保することである場合
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"
は簡潔ですが、要件は、出力された場合まったく同じようなものでなければ、同じ結果は得られません。重複が10個以上ある場合、それらの回答の出力はさらに変わります。しかし、ここの解決策は同じ答えを与えます。 10以上の重複を示すさらなる例がここにある。
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"
make.unique溶液は次のように救出することができる:
良い点、make.uniqueは、この場合、B及びB.Xの醜い混合物を与えます。 –
@akrun:あなたのソリューションを削除して申し訳ありません。 –