我如何知道一个字符串是否来自 R 中相同的字母组合?

How I know if a string come from the same combination of letter in R?

我对使用 R 很陌生,也许问题很简单。

我有一个包含可能的字母组合的字符向量。例如:

[1]“YMC”“YCM”“MYC”“CMY”“CYM”“MCY”“MEH”“HEM”“EMH”“MHE”“EHM”“HME”
[13] “CFF” “FCF” “FFC” “AYY” “YFS” “YYA” “SFY” “YSF” “FSY” “SYF” “YAY” “FYS”
[25] “HYP” “HPY” “WNP” “PWN” “PHY” “PNW” “YHP” “PYH” “WPN” “NPW” “YPH” “NWP”
[37] “BHF” “FHB” “BFH” “HBF” “FBH” “HFB” “BQR” “QRB” “BRQ” “RBQ” “QBR” “RQB”
[49]“BRK”“KRB”“RBK”“BKR”“RKB”“KBR”“WDP”“DPW”“DWP”“WPD”“PDW”“PWD”

我想知道哪些字符串共享相同的字母(由相同的字母组成,但组合不同)。

如你所见,前 6 个字符串全部来自“C”+“Y”+“M”,后 6 个字符串来自“M”+“E”+“H”。

或者 "GPWG" "GWGP" "GPGW" "PWGG" "GGPW" "PGWG" 来自:"G" + "G" +"W" + "P"

我可以使用 R 中的哪种代码自动回答这个问题?

非常感谢您的帮助

假设你的字符向量被称为vec,你可以这样做:

ordered <-  sapply(strsplit(vec, ''), function(x) paste(sort(x), collapse = ''))

df <- data.frame(string = vec, 
           letters = ordered, 
           group = match(ordered, unique(ordered)))

它为您提供了一个数据框,其中包含原始向量的列、它按字母顺序使用的字符以及一个分组变量,以便您可以识别哪些其他字符串是由相同的字母组合组成的:

df

#>    string letters group
#> 1     YMC     CMY     1
#> 2     YCM     CMY     1
#> 3     MYC     CMY     1
#> 4     CMY     CMY     1
#> 5     CYM     CMY     1
#> 6     MCY     CMY     1
#> 7     MEH     EHM     2
#> 8     HEM     EHM     2
#> 9     EMH     EHM     2
#> 10    MHE     EHM     2
#> 11    EHM     EHM     2
#> 12    HME     EHM     2
#> 13    CFF     CFF     3
#> 14    FCF     CFF     3
#> 15    FFC     CFF     3
#> 16    AYY     AYY     4
#> 17    YFS     FSY     5
#> 18    YYA     AYY     4
#> 19    SFY     FSY     5
#> 20    YSF     FSY     5
#> 21    FSY     FSY     5
#> 22    SYF     FSY     5
#> 23    YAY     AYY     4
#> 24    FYS     FSY     5
#> 25    HYP     HPY     6
#> 26    HPY     HPY     6
#> 27    WNP     NPW     7
#> 28    PWN     NPW     7
#> 29    PHY     HPY     6
#> 30    PNW     NPW     7
#> 31    YHP     HPY     6
#> 32    PYH     HPY     6
#> 33    WPN     NPW     7
#> 34    NPW     NPW     7
#> 35    YPH     HPY     6
#> 36    NWP     NPW     7
#> 37    BHF     BFH     8
#> 38    FHB     BFH     8
#> 39    BFH     BFH     8
#> 40    HBF     BFH     8
#> 41    FBH     BFH     8
#> 42    HFB     BFH     8
#> 43    BQR     BQR     9
#> 44    QRB     BQR     9
#> 45    BRQ     BQR     9
#> 46    RBQ     BQR     9
#> 47    QBR     BQR     9
#> 48    RQB     BQR     9
#> 49    BRK     BKR    10
#> 50    KRB     BKR    10
#> 51    RBK     BKR    10
#> 52    BKR     BKR    10
#> 53    RKB     BKR    10
#> 54    KBR     BKR    10
#> 55    WDP     DPW    11
#> 56    DPW     DPW    11
#> 57    DWP     DPW    11
#> 58    WPD     DPW    11
#> 59    PDW     DPW    11
#> 60    PWD     DPW    11

来自问题的可重现格式的数据

vec <- c("YMC", "YCM", "MYC", "CMY", "CYM", "MCY", "MEH", "HEM", "EMH", 
         "MHE", "EHM", "HME", "CFF", "FCF", "FFC", "AYY", "YFS", "YYA", 
         "SFY", "YSF", "FSY", "SYF", "YAY", "FYS", "HYP", "HPY", "WNP", 
         "PWN", "PHY", "PNW", "YHP", "PYH", "WPN", "NPW", "YPH", "NWP", 
         "BHF", "FHB", "BFH", "HBF", "FBH", "HFB", "BQR", "QRB", "BRQ", 
         "RBQ", "QBR", "RQB", "BRK", "KRB", "RBK", "BKR", "RKB", "KBR", 
         "WDP", "DPW", "DWP", "WPD", "PDW", "PWD")