# 連番をつける関数 serial.n <- function(x, abb=F, abb.n=4){ format.00 <- function(x){ # 書式を適用する内部関数 dig <- nchar(max(x)) # 最大桁数 fmt <- paste("%0", dig, "i", sep="") # 書式を設定 y<-"" # 空のデータ for(i in 1:length(x)) y[i] <- sprintf(fmt, x[i]) # 書式を適用 return(y) } id <- 1:length(x) # もとの順序を記憶 o.sorted <- order(id[order(x)]) # 元の順序 if (abb==T) x <- abbreviate(x, abb.n) # 省略形 x <- sort(x) # 並べ替え count <- tapply(x,x,length) # 要素の出現回数 count <- count[!is.na(count)] # NAの除去 n <- character() # 空のデータ for(i in 1:length(count)) {n <- c(n, format.00(1:count[i]))} # 1から出現回数までの連番を順次追加 x <- paste(x, n, sep="") # 入力と連番を結合 x[o.sorted] # 元の順序に戻す } # 使用方法 x <- sample(c("aaa","aab","ccc"), 30, replace=T) serial.n(x) # 既定値では省略形は使わない。 sort(serial.n(x)) serial.n(x, abb=T, abb.n=2) # 省略形を使うには、abb=Tとする。abb.nに省略形の最低(半角)文字数を指定する。