有没有办法从R中的字符串中按索引删除字符?

时间:2020-02-10 19:04:48

标签: r string

我有一串DNA序列,例如: “ ACGTTATATTTATGTTTTGGGATTTTAGCAGGAATGATTGGTACTGCTTTCAGTATGTTATATAGATTAGATTAGAGTTATCGGGACCGGGATCAATGTTAGGGGATATCATTTATACAATGTTATTGTTACTGCTCATGCTTTTGTTATGATTTTTTTTTTAGTAATGCCTGTTGTGGGTGTGTGATTACCAGTGGGTAGCCATTG

有没有一种方法可以删除特定位置的字母,例如在R的第20位?

我认为我也许可以使用正则表达式,但我认为表达方式不正确。

谢谢

2 个答案:

答案 0 :(得分:4)

一种选择是捕获直到19个字符,删除第20个元素并捕获其余字符

str2 <- sub("^(.{1,19}).(.*)", "\\1\\2", str1)

或带有一个捕获组

sub("^(.{1,19}).", "\\1", str1)

或者另一个选择是str_sub

library(stringr)
nchar(str1)
#[1] 280
str_sub(str1, 20, 20) <- ""
nchar(str1)
#[1] 279

数据

str1 <- "ACGTTATATTTATGTTTTGGGATTTTAGCAGGAATGATTGGTACTGCTTTCAGTATGTTAATTAGATTAGAGTTATCGGGACCGGGATCAATGTTAGGGGATATCATTTATACAATGTTATTGTTACTGCTCATGCTTTTGTTATGATTTTTTTTTTAGTAATGCCTGTGATGATTGGGGGGTTTGGGAATTGGTTAGTACCATTATATATTGGTGCCCCAGATATGGCATTCCCTCGATTAAATAATATAAGTTTTTGATTATTACCGCCGGCTTTAAG"

答案 1 :(得分:4)

或者,不使用regex表达式(并且可能不那么直接@tharun的答案),您可以使用strsplit提取字符串的每个字符作为序列,删除第20个字符并粘贴他们一起回来。

seq <- "ACGTTATATTTATGTTTTGGGATTTTAGCAGGAATGATTGGTACTGCTTTCAGTATGTTAATTAGATTAGAGTTATCGGGACCGGGATCAATGTTAGGGGATATCATTTATACAATGTTATTGTTACTGCTCATGCTTTTGTTATGATTTTTTTTTTAGTAATGCCTGTGATGATTGGGGGGTTTGGGAATTGGTTAGTACCATTATATATTGGTGCCCCAGATATGGCATTCCCTCGATTAAATAATATAAGTTTTTGATTATTACCGCCGGCTTTAAG"

nchar(seq)
[1] 280

seq2 <- paste(unlist(strsplit(seq,""))[-20], collapse = "")
nchar(seq2)
[1] 279