我的变量名称格式如下:
PP_Sample_12.GT
Run Code Online (Sandbox Code Playgroud)
或者
PP_Sample-17.GT
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用字符串拆分来 grep 出中间部分: ieSample_12
或Sample-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)
我最终得到的Sample
是PP_Sample_12.GT
。
还有其他方法可以做到这一点吗?也许使用模式/替换类型的函数?不过,不确定 R 中是否存在(但我认为这可能适用gsub
)
使用此输入:
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)
这是一个gsub
它将提取第一个之后_
和最后一个之前的所有内容.
x<-c("PP_Sample-12.GT","PP_Sample-17.GT")
gsub(".*_(.*)\\..*","\\1", x, perl=T)
Run Code Online (Sandbox Code Playgroud)