我如何知道一个字符串是否来自 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")
我对使用 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")