【问题标题】:K-mer words in RR中的K-mer单词
【发布时间】:2021-10-04 18:07:23
【问题描述】:

我还是 R 编程的新手,我只是不知道如何在下面从 python 到 R 编写相同的代码。

human_data 是来自 CSV 文件的数据框。这个词包括字母序列。基本上,我想将字符串的“单词”列序列转换为所有可能的长度为 6 的 k-mer 单词。

def getKmers(sequence, size=6):
    return [sequence[x:x+size] for x in range(len(sequence) - size + 1)]

human_data['words'] = human_data.apply(lambda x: getKmers(x['sequence']), axis=1)

【问题讨论】:

    标签: r nlp


    【解决方案1】:

    您也可以使用库 quanteda 来计算 k-mers (k-grams),以下代码显示了一个示例:

    library(quanteda)
    k = 6 # 6-mers
    human_data = data.frame(sequence=c('abcdefghijkl', 'xxxxyyxxyzz'))
    human_data$words <- apply(human_data, 1, 
                              function(x) char_ngrams(unlist(tokens(x['sequence'], 
                                          'character')), n=k, concatenator = ''))
    human_data
    #      sequence                                                  words
    #1 abcdefghijkl abcdef, bcdefg, cdefgh, defghi, efghij, fghijk, ghijkl
    #2  xxxxyyxxyzz         xxxxyy, xxxyyx, xxyyxx, xyyxxy, yyxxyz, yxxyzz
    

    【讨论】:

      【解决方案2】:

      我希望这会有所帮助,使用 R 基本命令:

      df = data.frame(words=c('asfdklajsjahk', 'dkajsadjkfggfh', 'kfjlhdaDDDhlw'))
      
      
      getKmers = function(sequence, size=6) {
          kmers = c()
          for (x in 1:(nchar(sequence) - size + 1)) {
              kmers = c(kmers, substr(sequence, x, x+size-1))
          }
          return(kmers)
      }
      
      sapply(df$words, getKmers)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多