我有一些看起来像“ TAGCAGaaccgtaAGTCAAgcgta”的数据,我想通过大写和小写字符之间的分隔来拆分。因此,我的输出将是大写字符串“ TAGCAG”和“ AGTCAA”以及小写字符串“ aaccgta”和“ gcgta”的列表
我尝试过
str <- c("TAGCAGaaccgtaAGTCAAgcgta")
library(stringr)
str_extract(str, '[[:lower:]]+')
str_extract(str, '[[:upper:]]+')
但这只是给我第一个大写或小写的实例。我希望能够在每个列表或数据框中获得所有实例。
答案 0 :(得分:2)
类似于@Calum您说过,str_extract_all
返回匹配模式的所有实例:
str_extract_all(str, '[[:lower:]]+')
[1]]
[1] "aaccgta" "gcgta"
str_extract_all(str, '[[:upper:]]+')
[[1]]
[1] "TAGCAG" "AGTCAA"
或者您可以使用|
正则表达式同时为大写和小写字符串设置子集。
str_extract_all(str, '[[:lower:]]+|[[:upper:]]+')
[[1]]
[1] "TAGCAG" "aaccgta" "AGTCAA" "gcgta"
您可以unlist()
输出以返回向量。
答案 1 :(得分:1)
我们可以通过将gregexpr()
与regmatches()
组合在一起来实现:
m <- gregexpr("[[:upper:]]+|[[:lower:]]+", str)
regmatches(str, m)
控制台:
[[1]]
[1] "TAGCAG" "aaccgta" "AGTCAA" "gcgta"