从每一行中提取特定数量的字符并在 R 中有条件地插入字母

Extract specific number of characters from every row and insert letters conditionally in R

我正在处理 DNA 测序数据,我需要从矩阵中提取特定数量的核苷酸。

数据集看起来像这样

1 "GCGGGCGGGGCGGGGTCTTGTGTGGGCTCAGC"
2 "GCAGTAA"
3 "GAACAGTGGCCGGAGCGTCT"
....(很多很多行)

从每一行,(1) 我想从 'tail' 中提取 10 个核苷酸,(2) 并想在开头引入虚拟字母 'Z' 以总共 10 个核苷酸,只有当核苷酸长度小于 10nts。

最终结果应该是这样的。

1 "TGGGCTCAGC"
2 "ZZZGCAGTAA"
3 "CGGAGCGTCT"
....(很多很多行)

首先我尝试了 'tail' 函数来尝试提取最后的核苷酸

尾巴(我的数据,n=10)

但是这个 returns 从 mydata 矩阵末尾开始的 10 行,而不是 10 个核苷酸。 有什么方法可以使用 R 实现吗?

非常感谢您的帮助

tail() 不是这项工作的正确功能,因为它查看 元素 。您想要的是查看每个元素内部的 个字符 的函数。

我想你有很多核苷酸要处理,所以我建议你使用非常高效的 stringi 包。在下面的代码中,只有在需要矩阵结果时才需要 matrix()。否则将返回一个字符向量。

library(stringi)
matrix(stri_pad(stri_sub(m, -10L), 10L, pad = "Z"))
#      [,1]        
# [1,] "TGGGCTCAGC"
# [2,] "ZZZGCAGTAA"
# [3,] "CGGAGCGTCT"

其中m是原始数据

m <- matrix(
    c("GCGGGCGGGGCGGGGTCTTGTGTGGGCTCAGC", "GCAGTAA", "GAACAGTGGCCGGAGCGTCT")
)