r - 如何从向量中删除某些项目?

标签 r regex vector

示例载体(基因转录本 ID):

a <- c('MSTRG.7176.1', 'MSTRG.7176.2', 'AT2G26340.2', 'AT2G26355.1')

这是长向量的子集,如何删除以“MS”开头的项目,然后切断左侧项目的末尾 2 位数字?

最佳答案

如果我们想像@sindri_baldur 提到的那样完全避免正则表达式,我们可以使用

string <- a[!startsWith(a, "MS")]
substr(string, 1, nchar(string) - 2)

或与 grepsubstr
string <- grep('^MS',a, invert = TRUE, value = TRUE)
substr(string, 1, nchar(string) - 2)
#[1] "AT2G26340" "AT2G26355"

由于我们有很多新答案添加了基准,包括所有长度为 400k 的向量。
a <- c('MSTRG.7176.1', 'MSTRG.7176.2', 'AT2G26340.2', 'AT2G26355.1')
a <- rep(a, 100000)

library(microbenchmark)

microbenchmark(
ronak1 = {string <- a[!startsWith(a, "MS")];substr(string, 1, nchar(string) - 2)}, 
ronak2 = {string <- grep('^MS',a, invert = TRUE, value = TRUE);substr(string, 1, nchar(string) - 2)}, 
sotos = {word(a[!str_detect(a, '^MS')], 1, sep = fixed('.'))}, 
thothal = {b1 <- a[!grepl("^MS", a)];gsub("\\.[0-9]$", "", b1)}, 
zx8754 = tools::file_path_sans_ext(a[ !grepl("^MS", a) ]), 
tmfmnk = dirname(chartr(".", "/", a[!grepl("^MS", a)])), 
NelSonGon = {b<-stringi::stri_replace_all(stringi::stri_sub(a,1,-3),regex="^M.*","");b[grepl('\\w+',b)]}
)


#Unit: milliseconds
#      expr        min         lq       mean     median         uq       max neval
#    ronak1   34.75928   38.58217   45.63393   40.32845   44.24355  225.2581   100
#    ronak2   94.10687   96.72758  110.83819   99.26914  105.98822  938.2969   100
#     sotos 1926.21112 2500.27209 2852.43240 2861.61699 3173.10420 4478.7890   100
#   thothal  155.95328  160.62800  169.02275  164.46494  169.32770  218.5033   100
#    zx8754  172.96970  179.03618  186.12374  183.96887  188.06251  234.1895   100
#    tmfmnk  189.29085  195.14593  208.89245  199.47172  204.40604  547.7497   100
# NelSonGon  186.54426  198.29856  226.19221  206.54542  217.92970  948.2535   100

关于r - 如何从向量中删除某些项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55157124/

相关文章:

c++ - Cuda thrust::device_vector 从特定范围获取指针

c++ - 定时 vector vs map vs unordered_map 查找

c++ - 无法正确打印 vector 内容

r - lis[[i]] : attempt to select less than one element 中出现错误

r - 修复天花板中的浮点不精确性

python - 文本处理 - Python 与 Perl 的性能对比

java - 正则表达式获取括号外的字符串

R 如何使用日期创建自定义 x 轴

r - LaTeX 到 RTF 的转换,包括引用和数字

regex - 如何使用awk轻松过滤日志?