1 combinations r unique combinatorics
我\xc2\xb4m 对使用 R 还很陌生,也许问题很简单。
\n我有一个带有可能的字母组合的字符向量。例如:
\n[1]“YMC”“YCM”“MYC”“CMY”“CYM”“MCY”“MEH”“HEM”“EMH”“MHE”“EHM”“HME”\n[13]“CFF”“
FCF” "FFC" "AYY" "YFS" "YYA" "SFY" "YSF" "FSY" "SYF" "YAY" "FYS"
\n[25] "HYP" "HPY" "WNP" "PWN" "PHY" "PNW" "YHP" "PYH" "WPN" "NPW" "YPH" "NWP"
\n[37] "BHF" "FHB" "BFH" "HBF" "FBH" "HFB" "BQR" "QRB" “BRQ”“RBQ”“QBR”“RQB”
\n[49]“BRK”“KRB”“RBK”“BKR”“RKB”“KBR”“WDP”“DPW”“DWP”“WPD”“PDW” “残疾人”
我想知道哪些字符串共享相同的字母(由相同的字母但以不同的组合组成)。
\n正如您所看到的,前 6 个字符串全部来自“C”+“Y”+“M”,后 6 个字符串来自“M”+“E”+“H”。
\n或者\n“GPWG”“GWGP”“GPGW”“PWGG”“GGPW”“PGWG”来自:“G”+“G”+“W”+“P”
\nRI 中什么样的代码可以自动回答这个问题?
\n非常感谢您的帮助
\n假设你的字符向量被称为vec,你可以这样做:
ordered <- sapply(strsplit(vec, ''), function(x) paste(sort(x), collapse = ''))
df <- data.frame(string = vec,
letters = ordered,
group = match(ordered, unique(ordered)))
Run Code Online (Sandbox Code Playgroud)
它为您提供了一个数据框,其中包含原始向量的列、按字母顺序使用的字符以及分组变量,以便您可以识别哪些其他字符串是由相同的字母组合组成的:
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
Run Code Online (Sandbox Code Playgroud)
问题中的数据采用可重现的格式
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")
Run Code Online (Sandbox Code Playgroud)