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