繁体   English   中英

在R中提取基因注释ID

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM