R中基因注释id的提取

R中基因注释id的提取,r,string,parsing,data.table,bioinformatics,R,String,Parsing,Data.table,Bioinformatics,我有一个注释文件,我想解析出FlyBase转录本ID以创建一个新列。我试过regex,但没用。不确定我是否只是没有正确使用它。IDS在字符串的开头或中间,这是来自不同数据库的IDS集合。也可能有多个FlyBase ID,在这种情况下,我希望使用类似于ID1/ID2的分隔符 注释行示例:“AY113634//--//--//100//2//2//0/////FBtr0089787//--//100//2//2//0” “FBtr0079338//--/100//15//15//0///FBtr00

我有一个注释文件,我想解析出FlyBase转录本ID以创建一个新列。我试过regex,但没用。不确定我是否只是没有正确使用它。IDS在字符串的开头或中间,这是来自不同数据库的IDS集合。也可能有多个FlyBase ID,在这种情况下,我希望使用类似于
ID1/ID2
的分隔符

注释行示例:
“AY113634//--//--//100//2//2//0/////FBtr0089787//--//100//2//2//0”

“FBtr0079338//--/100//15//15//0///FBtr0086326//--/100//15//15//0///FBtr0100846//--/100//15///0///15///0///0///0///0///0///0///0///0///0///0///0///15//0///0///0///0//-15//-0//0

我想创建一个保持相同顺序的列,但如果需要,只包含带分隔符的FlyBase ID。我正在使用
data.table
包,因此如果有使用数据表的解决方案,我将不胜感激。我的一个想法是使用
sub
,搜索[
FBtr][0-9+]
(不确定这是否正确),如果它与该模式不匹配,则将其替换为

示例表:
x这里有一些东西可以让您开始,一旦我对“data.table”的外观有了更好的了解,我可以更新答案:

x <- "FBtr0079338 // --- // 100 // 15 // 15 // 0 /// FBtr0086326 // --- // 100 // 15 // 15 // 0 /// FBtr0100846 // --- // 100 // 15 // 15 // 0 /// NONDMET000145 // --- // 100 // 15 // 15 // 0 /// NONDMET000970 // --- // 100 // 15 // 15 // 0 /// NONDMET000971 // --- // 100 // 15 // 15 // 0"
sapply(strsplit(x, "/+"), function(s) grep("FBtr", trimws(s), value=TRUE))

#     [,1]         
#[1,] "FBtr0079338"
#[2,] "FBtr0086326"
#[3,] "FBtr0100846"

sapply(strsplit(x, "/+"), function(x) paste0(grep("FBtr", trimws(x), value=TRUE), collapse = ";"))
#[1] "FBtr0079338;FBtr0086326;FBtr0100846"

x更具体到
数据。表
,并使用
stringr
包:

library(stringr)
x[, .(IDs = str_c(unlist(str_extract_all(V3, "(FBtr)[0-9]+")), 
    collapse = "/")), by = probesetID]

请你做一个可复制的例子:这可能足够了,但我还是贴了一个示例表。
library(stringr)
x[, .(IDs = str_c(unlist(str_extract_all(V3, "(FBtr)[0-9]+")), 
    collapse = "/")), by = probesetID]