R 如何确定字符串中每个位置的码字频率
我有几个长度可变的字符串,示例如下:R 如何确定字符串中每个位置的码字频率,r,R,我有几个长度可变的字符串,示例如下: sequences <- c("ABCDEFGH", "FGHABCDEF") 然而,我的实际数据有100个码字和10000多个序列。我正在寻找一种计算效率高的方法。最大起始位置数始终是最长序列(本例中为9个字母)减去3+1=7,因为所有码字的长度均为3。对于我的使用,码字长度也是可变的,所以我希望有一种方法能够做到这一点,而不考虑码字长度 如果需要,请随时要求澄清 谢谢以下是我的看法: key$substrings <- sub(",\\s"
sequences <- c("ABCDEFGH", "FGHABCDEF")
然而,我的实际数据有100个码字和10000多个序列。我正在寻找一种计算效率高的方法。最大起始位置数始终是最长序列(本例中为9个字母)减去3+1=7,因为所有码字的长度均为3。对于我的使用,码字长度也是可变的,所以我希望有一种方法能够做到这一点,而不考虑码字长度
如果需要,请随时要求澄清
谢谢以下是我的看法:
key$substrings <- sub(",\\s", "|", key$substrings)
res <- lapply(key$substrings, function(x) {
x <- gregexpr(x, text = sequences)
setNames(as.data.frame(table(unlist(x))), c("StartingPosition", "Occurences"))
})
res <- do.call(rbind, Map(cbind, res,
codeword = key$codewords,
substrings = key$substrings))
res <- subset(res, StartingPosition != -1)
# StartingPosition Occurences codeword substrings
#1 1 1 1 BCD|FGH
#2 2 1 1 BCD|FGH
#3 5 1 1 BCD|FGH
#4 6 1 1 BCD|FGH
#5 3 1 2 CDE|EFG
#6 6 1 2 CDE|EFG
#7 1 1 3 ABC|DEF
#8 4 2 3 ABC|DEF
#9 7 1 3 ABC|DEF
#11 2 1 4 GHA|HAB
子字符串的第二部分如何相关?@A5C1D2H2I1M1N2O1R2T1刚刚添加。我希望这有帮助。谢谢:)@docendodiscimus这两个三元组字符串都对应一个码字。因此,如果出现BCD或FGH,我将它们视为相同的(码字1)。码字3对应于子字符串“ABC,DEF”。ABC从“ABCDEFGH”中的位置1开始。我知道我的问题中没有包括这一点,但是如果我有一个序列有两个相同的三联体呢?例如,“ABCDEFABC”@KeshavM,请在评论中查看我对您的问题的更新答案,以及稍微更改的顺序,这一点很重要。@KeshavM如果您不想报告多个匹配项,可以使用regexpr而不是gregexpr。
StartingPosition Codeword Occurences
1 1 1
1 2 0
1 3 1
1 4 0
2 1 1
2 2 0
2 3 0
2 4 1
3 1 0
3 2 1
3 3 0
3 4 1
4 1 0
4 2 0
4 3 2
4 4 0
key$substrings <- sub(",\\s", "|", key$substrings)
res <- lapply(key$substrings, function(x) {
x <- gregexpr(x, text = sequences)
setNames(as.data.frame(table(unlist(x))), c("StartingPosition", "Occurences"))
})
res <- do.call(rbind, Map(cbind, res,
codeword = key$codewords,
substrings = key$substrings))
res <- subset(res, StartingPosition != -1)
# StartingPosition Occurences codeword substrings
#1 1 1 1 BCD|FGH
#2 2 1 1 BCD|FGH
#3 5 1 1 BCD|FGH
#4 6 1 1 BCD|FGH
#5 3 1 2 CDE|EFG
#6 6 1 2 CDE|EFG
#7 1 1 3 ABC|DEF
#8 4 2 3 ABC|DEF
#9 7 1 3 ABC|DEF
#11 2 1 4 GHA|HAB
sequences <- "ABCDEFABC"
res <- lapply(key$substrings, function(x) {
x <- gregexpr(x, text = sequences)
setNames(as.data.frame(table(unlist(x))), c("StartingPosition", "Occurences"))
})
res <- do.call(rbind, Map(cbind, res,
codeword = key$codewords,
substrings = key$substrings))
res <- subset(res, StartingPosition != -1)
# StartingPosition Occurences codeword substrings
#1 2 1 1 BCD|FGH
#2 3 1 2 CDE|EFG
#3 1 1 3 ABC|DEF # 1. occurence of ABC
#4 4 1 3 ABC|DEF
#5 7 1 3 ABC|DEF # 2. occurence of ABC