[英]Extracting Gene Annotation IDs in R
我有一个注释文件,我想解析出FlyBase脚本ID来创建新列。 我已经尝试过正则表达式,但是没有用。 不知道我是否可能没有正确使用它。 这些ID位于字符串的开头或中间,在这种情况下,是来自不同数据库的ID的集合。 在这种情况下,我可能想使用多个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 // 15 // 0 /// NONDMET000145 // --- // 100 // 15 // 15 // 0 /// NONDMET000970 // --- // 100 // 15 // 15 // 0 /// NONDMET000971 // --- // 100 // 15 // 15 // 0"
我想创建一个保持相同顺序的列,但在必要时仅包含带有分隔符的FlyBase ID。 我正在使用data.table
包,因此如果有使用数据表的解决方案,将不胜感激。 我的一个主意是使用sub
,搜索[ FBtr][0-9+]
(不确定是否正确),如果它与该模式不匹配,则将其替换为""
。
示例表: x <- data.table(probesetID = 1:10, probesetType = rep("main", 10), rep("FBtr0299871 // --- // 100 // FBtr193920 // 3 // 3 // 0", 10))
这是一些入门的信息,一旦您对“ 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$FBtr <- sapply(strsplit(x$V3, "/+"), function(x) paste0(grep("FBtr", trimws(x), value=TRUE), collapse = ";"))
本质上,您可以提供包含x
注释的列。
更特定于data.table
,并使用stringr
包:
library(stringr)
x[, .(IDs = str_c(unlist(str_extract_all(V3, "(FBtr)[0-9]+")),
collapse = "/")), by = probesetID]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.