Stringr str_which 首先比较第一行与整列而不是下一行
Stringr str_which first compare 1st row with whole column than to next row
我正在尝试匹配列中的 DNA 序列。我试图找到它本身的更长版本,但在本专栏中它也有相同的序列。
我正在尝试使用我知道它有效的 Str_which,因为如果我手动将搜索模式放入其中,它会找到包含序列的行。
作为我的数据预览:
SNID type seqs2
9584818 seqs TCTTTCTTTAAGACACTGTCCCAAGCTGAAAGGGAACCTACCAAAGAAACTTCTTCATCTRAGGAATCTACTTATATGTGAGTGCAATGAACTTGTAGATTCTGCTCCTGGGGCCACAGAA
9584818 reversed TTCTGTGGCCCCAGGAGCAGAATCTACAAGTTCATTGCACTCACATATAAGTAGATTCCTYAGATGAAGAAGTTTCTTTGGTAGGTTCCCTTTCAGCTTGGGACAGTGTCTTAAAGAAAGA
9562505 seqs GTCTTCAGCATCTTTCTTTAAGACACTGTCCCAAGCTGAAAGGGAACCTACCAAAGAAACTTCTTCATCTRAGGAATCTACTTATATGTGAGTGCAATGAACTTGTAGATTCTGCTCCTGGGGCCACAGAACTTTGTGAAT
9562505 reversed ATTCACAAAGTTCTGTGGCCCCAGGAGCAGAATCTACAAGTTCATTGCACTCACATATAAGTAGATTCCTYAGATGAAGAAGTTTCTTTGGTAGGTTCCCTTTCAGCTTGGGACAGTGTCTTAAAGAAAGATGCTGAAGAC
使用第一行的简单搜索作为 x
x <- "TCTTTCTTTAAGACACTGTCCCAAGCTGAAAGGGAACCTACCAAAGAAACTTCTTCATCTRAGGAATCTACTTATATGTGAGTGCAATGAACTTGTAGATTCTGCTCCTGGGGCCACAGAA"
str_which(df$seqs2, x)
我得到了我期望的答案:
> str_which(df$seqs3, x)
[1] 1 3
但是当我尝试搜索整个列时,我只得到了行本身的结果。而不是其中也说明的其他行。
> str_which(df$seqs2, df$seqs2)
[1] 1 2 3 4
由于我的数据集很大,我不想手动执行此操作,而是使用该列作为输入,而不仅仅是先声明“x”。
有人知道如何解决这个问题吗?到目前为止,我已经尝试了大多数 Stringr 命令,但我可能错误地执行了错误或跳过了一些重要命令。
提前致谢
您可能需要 lapply
:
lapply(df$seqs2, function(x) stringr::str_which(df$seqs2, x))
您也可以使用 grep
将其保留在基数 R 中:
lapply(df$seqs2, function(x) grep(x, df$seqs2))
我正在尝试匹配列中的 DNA 序列。我试图找到它本身的更长版本,但在本专栏中它也有相同的序列。
我正在尝试使用我知道它有效的 Str_which,因为如果我手动将搜索模式放入其中,它会找到包含序列的行。
作为我的数据预览:
SNID type seqs2
9584818 seqs TCTTTCTTTAAGACACTGTCCCAAGCTGAAAGGGAACCTACCAAAGAAACTTCTTCATCTRAGGAATCTACTTATATGTGAGTGCAATGAACTTGTAGATTCTGCTCCTGGGGCCACAGAA
9584818 reversed TTCTGTGGCCCCAGGAGCAGAATCTACAAGTTCATTGCACTCACATATAAGTAGATTCCTYAGATGAAGAAGTTTCTTTGGTAGGTTCCCTTTCAGCTTGGGACAGTGTCTTAAAGAAAGA
9562505 seqs GTCTTCAGCATCTTTCTTTAAGACACTGTCCCAAGCTGAAAGGGAACCTACCAAAGAAACTTCTTCATCTRAGGAATCTACTTATATGTGAGTGCAATGAACTTGTAGATTCTGCTCCTGGGGCCACAGAACTTTGTGAAT
9562505 reversed ATTCACAAAGTTCTGTGGCCCCAGGAGCAGAATCTACAAGTTCATTGCACTCACATATAAGTAGATTCCTYAGATGAAGAAGTTTCTTTGGTAGGTTCCCTTTCAGCTTGGGACAGTGTCTTAAAGAAAGATGCTGAAGAC
使用第一行的简单搜索作为 x
x <- "TCTTTCTTTAAGACACTGTCCCAAGCTGAAAGGGAACCTACCAAAGAAACTTCTTCATCTRAGGAATCTACTTATATGTGAGTGCAATGAACTTGTAGATTCTGCTCCTGGGGCCACAGAA"
str_which(df$seqs2, x)
我得到了我期望的答案:
> str_which(df$seqs3, x)
[1] 1 3
但是当我尝试搜索整个列时,我只得到了行本身的结果。而不是其中也说明的其他行。
> str_which(df$seqs2, df$seqs2)
[1] 1 2 3 4
由于我的数据集很大,我不想手动执行此操作,而是使用该列作为输入,而不仅仅是先声明“x”。
有人知道如何解决这个问题吗?到目前为止,我已经尝试了大多数 Stringr 命令,但我可能错误地执行了错误或跳过了一些重要命令。
提前致谢
您可能需要 lapply
:
lapply(df$seqs2, function(x) stringr::str_which(df$seqs2, x))
您也可以使用 grep
将其保留在基数 R 中:
lapply(df$seqs2, function(x) grep(x, df$seqs2))