R 如何根据第二个字符串删除字符串中的字符?

R 如何根据第二个字符串删除字符串中的字符?,r,R,考虑以下两个字符串: string1 <- "GCTCCC...CTCCATGAAGTA...CTTCACATCCGTGT.CCGGCCTGGCCGCGGAGAGCCC" string_reference <- "GCTCCC...CTCCATGAAGTATTTCTTCACATCCGTGT.CCGGCCTGGCCGCGGAGAGCCC" 使用: string1v与Robert的类似,但“矢量化”版本: s1使用intersect查找重叠的 cutpos <- do.call(

考虑以下两个字符串:

string1 <- "GCTCCC...CTCCATGAAGTA...CTTCACATCCGTGT.CCGGCCTGGCCGCGGAGAGCCC"
string_reference <- "GCTCCC...CTCCATGAAGTATTTCTTCACATCCGTGT.CCGGCCTGGCCGCGGAGAGCCC"
使用:


string1v与Robert的类似,但“矢量化”版本:


s1使用
intersect
查找重叠的

cutpos <- do.call(intersect, 
        sapply(list(string_reference,string1), gregexpr, pattern=".", fixed=TRUE)
          )
paste(strsplit(string1,"",fixed=TRUE)[[1]][-cutpos],collapse="")
#[1] "GCTCCCCTCCATGAAGTA...CTTCACATCCGTGTCCGGCCTGGCCGCGGAGAGCCC"

cutpos我会使用R的真正矢量化子集设置和逻辑比较方法

# Split the strings
x <- strsplit( c( string1 , string_reference ) , "" )
# Compare and remove dots from string1 when dots also appear in the reference string at the same position
paste( x[[1]][ ! (x[[2]]== "." & x[[1]] == ".") ] , collapse = "" )
#[1] "GCTCCCCTCCATGAAGTA...CTTCACATCCGTGTCCGGCCTGGCCGCGGAGAGCCC"
#拆分字符串

Simon,我认为用户希望删除出现在相同位置的点(因此删除39处的点,以及第一组点)。这就是说,我不会把我的生命押在它身上……但是+1用于更简单的子集设置。@BrodieG当然!实际上,这正是我的代码所做的,我只是在上面发布了一个旧表达式的结果,而不是我的命令所做的。干杯太好了
paste0
是冗余的,因为
collapse=”“
@RobertKrzyzanowski,是的,虽然这不是因为
collapse
是“”,而是因为只有一个向量。
s1 <- unlist(strsplit(string1, ""))
s2 <- unlist(strsplit(string_reference, ""))
paste0(Filter(Negate(is.na), ifelse(s1 == s2 & s1 == ".", NA, s1)), collapse="")
# [1] "GCTCCCCTCCATGAAGTA...CTTCACATCCGTGTCCGGCCTGGCCGCGGAGAGCCC"
cutpos <- do.call(intersect, 
        sapply(list(string_reference,string1), gregexpr, pattern=".", fixed=TRUE)
          )
paste(strsplit(string1,"",fixed=TRUE)[[1]][-cutpos],collapse="")
#[1] "GCTCCCCTCCATGAAGTA...CTTCACATCCGTGTCCGGCCTGGCCGCGGAGAGCCC"
attr(cutpos, 'match.length') <- rep(1L, length(cutpos))
attr(cutpos, 'useBytes') <- TRUE

do.call(paste0, c(regmatches(string1, list(cutpos), invert=TRUE), collapse=""))
## [1] "GCTCCCCTCCATGAAGTA...CTTCACATCCGTGTCCGGCCTGGCCGCGGAGAGCCC"
# Split the strings
x <- strsplit( c( string1 , string_reference ) , "" )
# Compare and remove dots from string1 when dots also appear in the reference string at the same position
paste( x[[1]][ ! (x[[2]]== "." & x[[1]] == ".") ] , collapse = "" )
#[1] "GCTCCCCTCCATGAAGTA...CTTCACATCCGTGTCCGGCCTGGCCGCGGAGAGCCC"