我下面有这样的字符串
tt <- c("16S_M_T1_R1_S1_S50_R1_001.fastq.gz", "16S_M_T1_R1_S1_S50_R2_001.fastq.gz",
"16S_M_T1_R1_S2_S62_R1_001.fastq.gz")
我想删除第5个
_
之前的所有内容和第6个_
之后的所有内容。我想要的结果是:
S50, S50, S62
我可以通过执行类似
sub("^(.*?_.*?_.*?_.*?_.*?_.*?)_.*", "\\1", tt)
的操作来分多个步骤进行操作,但是我想知道是否有更好的单步执行方法。 最佳答案
您可以使用strsplit
sapply(strsplit(tt, "_"), "[[", 6)
#[1] "S50" "S50" "S62"
说明:我们使用 vector 化的
strsplit
在每个tt
上分割"_"
,从而得到list
;然后sapply(..., "[[", 6)
从每个list
元素中提取第6个元素。或者,您可以使用显式匿名函数
sapply(strsplit(tt, "_"), function(x) x[6])