根据子字符串的长度过滤一维字符向量
Posted
技术标签:
【中文标题】根据子字符串的长度过滤一维字符向量【英文标题】:filter 1D character vector according to length of substrings 【发布时间】:2022-01-03 16:32:04 【问题描述】:我有这个字符向量:
protein = "ARTKQTARKSTGGKAPRKQLATKAARKSAPATGGVKKPHRYRPGTVALREIRRYQKSTELLIRKLPFQRLVREIAQDFKTDLRFQSSAVMALQEACEAYLVGLFEDTNLCAIHAKRVTIMPKDIQLARRIRGERA"
我想根据字母 R 的出现来分片。
peptide_fragments <- str_split(protein, "(?<=[R])")
现在从生成的片段中,我想省略以下子字符串:
-
不要包含字母 K
然后从剩余的子串中省略:
-
字符长度小于6的。
【问题讨论】:
您的预期结果是什么? 【参考方案1】:我们可以尝试使用纯 R 正则表达式方法:
protein <- "ARTKQTARKSTGGKAPRKQLATKAARKSAPATGGVKKPHRYRPGTVALREIRRYQKSTELLIRKLPFQRLVREIAQDFKTDLRFQSSAVMALQEACEAYLVGLFEDTNLCAIHAKRVTIMPKDIQLARRIRGERA"
parts <- strsplit(protein, "(?<=R)", perl=TRUE)[[1]]
output <- grep("^(?=.*K).6,$", parts, value=TRUE, perl=TRUE)
output
[1] "TKQTAR" "KSTGGKAPR"
[3] "KQLATKAAR" "KSAPATGGVKKPHR"
[5] "YQKSTELLIR" "KLPFQR"
[7] "EIAQDFKTDLR" "FQSSAVMALQEACEAYLVGLFEDTNLCAIHAKR"
[9] "VTIMPKDIQLAR"
【讨论】:
这也完成了工作。谢谢!【参考方案2】:如果你想在 "R" 之后拆分:
temp <- unlist(str_split(protein, "(?<=R)"))
res <- temp[grepl("K", temp) & !nchar(temp) < 6]
结果:
res
[1] "TKQTAR" "KSTGGKAPR"
[3] "KQLATKAAR" "KSAPATGGVKKPHR"
[5] "YQKSTELLIR" "KLPFQR"
[7] "EIAQDFKTDLR" "FQSSAVMALQEACEAYLVGLFEDTNLCAIHAKR"
[9] "VTIMPKDIQLAR"
【讨论】:
IIRC OP 想要拒绝任何序列不具有 K 或长度小于 6。 这工作得很好。 如果是,请考虑投票和/或接受答案。以上是关于根据子字符串的长度过滤一维字符向量的主要内容,如果未能解决你的问题,请参考以下文章