Có thể làm như sau,
Tạo ma trận các hoán chuyển có thể có
allSwitch <- sapply(letters, function(x) paste(x,letters, sep = ""))
Phần đầu kết quả có dạng như sau
> head(allSwitch)
a b c d e f g h i j k l m n o
[1,] "aa" "ba" "ca" "da" "ea" "fa" "ga" "ha" "ia" "ja" "ka" "la" "ma" "na" "oa"
[2,] "ab" "bb" "cb" "db" "eb" "fb" "gb" "hb" "ib" "jb" "kb" "lb" "mb" "nb" "ob"
[3,] "ac" "bc" "cc" "dc" "ec" "fc" "gc" "hc" "ic" "jc" "kc" "lc" "mc" "nc" "oc"
[4,] "ad" "bd" "cd" "dd" "ed" "fd" "gd" "hd" "id" "jd" "kd" "ld" "md" "nd" "od"
[5,] "ae" "be" "ce" "de" "ee" "fe" "ge" "he" "ie" "je" "ke" "le" "me" "ne" "oe"
[6,] "af" "bf" "cf" "df" "ef" "ff" "gf" "hf" "if" "jf" "kf" "lf" "mf" "nf" "of"
p q r s t u v w x y z
[1,] "pa" "qa" "ra" "sa" "ta" "ua" "va" "wa" "xa" "ya" "za"
[2,] "pb" "qb" "rb" "sb" "tb" "ub" "vb" "wb" "xb" "yb" "zb"
[3,] "pc" "qc" "rc" "sc" "tc" "uc" "vc" "wc" "xc" "yc" "zc"
[4,] "pd" "qd" "rd" "sd" "td" "ud" "vd" "wd" "xd" "yd" "zd"
[5,] "pe" "qe" "re" "se" "te" "ue" "ve" "we" "xe" "ye" "ze"
[6,] "pf" "qf" "rf" "sf" "tf" "uf" "vf" "wf" "xf" "yf" "zf"
Tiếp tục tạo vector các chữ trên
foo <- c('abandons', 'abase', 'abased', 'abasement', 'abash', 'abashed', 'abate', 'abated', 'bodices', 'bodied', 'bodies', 'bodiless', 'bodily', 'boding', 'bodkin', 'body', 'cytotoxic', 'czar', 'czars', 'czech', 'czechs', 'dab', 'dabbed', 'dabbing', 'dabble', 'dabbled')
Tìm trong các dãy foo
các hoán chuyển, đếm và trả về số lần tương ứng, sau đó thì công việc chỉ là xếp lại số liệu theo ý muốn,
saved <- NULL
for (i in allSwitch){
count <- length(which(grepl(i,foo)))
saved <- rbind(saved,cbind(i,count))
}
Kết quả
> head(saved)
i count
[1,] "aa" "0"
[2,] "ab" "13"
[3,] "ac" "0"
[4,] "ad" "0"
[5,] "ae" "0"
[6,] "af" "0"
Toàn bộ các hoán chuyển tìm được
> saved[saved[,2]!=0,]
i count
[1,] "ab" "13"
[2,] "an" "1"
[3,] "ar" "2"
[4,] "as" "5"
[5,] "at" "2"
[6,] "ba" "8"
[7,] "bb" "4"
[8,] "be" "1"
[9,] "bi" "1"
[10,] "bl" "2"
[11,] "bo" "8"
[12,] "ce" "1"
[13,] "ch" "2"
[14,] "cy" "1"
[15,] "cz" "4"
[16,] "da" "5"
[17,] "di" "6"
[18,] "dk" "1"
[19,] "do" "1"
[20,] "dy" "1"
[21,] "ec" "2"
[22,] "ed" "6"
[23,] "em" "1"
[24,] "en" "1"
[25,] "es" "3"
[26,] "he" "1"
[27,] "hs" "1"
[28,] "ic" "2"
[29,] "ie" "2"
[30,] "il" "2"
[31,] "in" "3"
[32,] "ki" "1"
[33,] "le" "3"
[34,] "ly" "1"
[35,] "me" "1"
[36,] "nd" "1"
[37,] "ng" "2"
[38,] "ns" "1"
[39,] "nt" "1"
[40,] "od" "8"
[41,] "on" "1"
[42,] "ot" "1"
[43,] "ox" "1"
[44,] "rs" "1"
[45,] "se" "3"
[46,] "sh" "2"
[47,] "ss" "1"
[48,] "te" "2"
[49,] "to" "1"
[50,] "xi" "1"
[51,] "yt" "1"
[52,] "za" "2"
[53,] "ze" "2"