根据一个模式在R中提取一个子串
假设我有一个string列表: string = c("G1:E001", "G2:E002", G3:E003)
。 现在我希望得到一个只包含冒号“:”后面的部分的string向量,即substring = c(E001,E002,E003)
。 R有没有一个方便的方法来做到这一点? 使用substr
? 谢谢!
以下是几种方法:
1)分
sub(".*:", "", string) ## [1] "E001" "E002" "E003"
2)strsplit
sapply(strsplit(string, ":"), "[", 2) ## [1] "E001" "E002" "E003"
3)read.table
read.table(text = string, sep = ":", as.is = TRUE)$V2 ## [1] "E001" "E002" "E003"
4)子串
这假定第二部分总是从第四个字符开始(在问题的例子中就是这种情况):
substring(string, 4) ## [1] "E001" "E002" "E003"
4a)子串/正则expression式
如果冒号不总是在已知的位置,我们可以通过search来修改(4):
substring(string, regexpr(":", string) + 1)
5)strapplyc
strapplyc
返回括号内的部分:
library(gsubfn) strapplyc(string, ":(.*)", simplify = TRUE) ## [1] "E001" "E002" "E003"
6)read.dcf
如果冒号之前的子string是唯一的(这是问题中的例子),那么这个函数才有效。 此外,它要求分隔符是冒号(这是问题)。 如果使用不同的分隔符,那么我们可以使用sub
来先用冒号replace它。 例如,如果分隔符是_
那么string <- sub("_", ":", string)
c(read.dcf(textConnection(string))) ## [1] "E001" "E002" "E003"
添加。 strapplyc
和read.dcf
解决scheme。
注意。
inputstring
被假定为:
string <- c("G1:E001", "G2:E002", "G3:E003")
例如使用gsub
或sub
gsub('.*:(.*)','\\1',string) 1] "E001" "E002" "E003"
这是另一个简单的答案
gsub("^.*:","", string)
这应该做的:
gsub("[AZ][1-9]:", "", string)
给
[1] "E001" "E002" "E003"