在 R 中提取模式/分隔符之间的字符串

use*_*449 6 regex r strsplit

我的变量名称格式如下:

PP_Sample_12.GT
Run Code Online (Sandbox Code Playgroud)

或者

PP_Sample-17.GT
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用字符串拆分来 grep 出中间部分: ieSample_12Sample-17. 但是,当我这样做时:

IDtmp <- sapply(strsplit(names(df[c(1:13)]),'_'),function(x) x[2])
IDs <- data.frame(sapply(strsplit(IDtmp,'.GT',fixed=T),function(x) x[1]))
Run Code Online (Sandbox Code Playgroud)

我最终得到的SamplePP_Sample_12.GT

还有其他方法可以做到这一点吗?也许使用模式/替换类型的函数?不过,不确定 R 中是否存在(但我认为这可能适用gsub

G. *_*eck 6

使用此输入:

x <- c("PP_Sample_12.GT", "PP_Sample-17.GT")
Run Code Online (Sandbox Code Playgroud)

1)strsplit。将第一个下划线替换为点,然后按点分割:

spl <- strsplit(sub("_", ".", x), ".", fixed = TRUE)
sapply(spl, "[", 2)
Run Code Online (Sandbox Code Playgroud)

2) gsub 将前缀(^[^_]*_)和后缀(\\.[^.]*$")替换为空字符串:

gsub("^[^_]*_|\\.[^.]*$", "", x)
Run Code Online (Sandbox Code Playgroud)

3) gsubfn::strapplyc 提取下划线和点之间的所有内容。

library(gsubfn)
strapplyc(x, "_(.*)\\.", simplify = TRUE)
Run Code Online (Sandbox Code Playgroud)


MrF*_*ick 5

这是一个gsub它将提取第一个之后_和最后一个之前的所有内容.

x<-c("PP_Sample-12.GT","PP_Sample-17.GT")
gsub(".*_(.*)\\..*","\\1", x, perl=T)
Run Code Online (Sandbox Code Playgroud)