r - 将同义词链接到通用标识符

标签 r split

我有一个 R 数据框(基因信息,约 20000 个条目),简化后如下所示:

> head(alias_db)
   Synonyms               dbXref   
1  PA1m|A2m|AI893533|MAM  ENSMUSG00000030359
2  AA-NAT|Nat-2|Nat4|Snat ENSMUSG00000020804

一个基因有不同的名称(同义词),用“|”分隔和 dbXref 字段(数据库标识符)。我想创建一个如下所示的新数据框:

  Names dbXref
1 Pzp   ENSMUSG00000030359
2 A1m   ENSMUSG00000030359
...
4 MAM   ENSMUSG00000030359 
5 Aanat ENSMUSG00000020804
...

基本上,同义词是键,dbXref 字段是我的值;我希望能够搜索同义词中的任何名称,然后使用其 dbXref 查找另一个更大的数据框。

执行此操作的最佳方法是什么?我在想这个:

alias_db$SplitSynonyms=strsplit(alias_db$Synonyms,"|",fixed=TRUE)
geneNames<-new.env()
for(i in seq(nrow(alias_db)))
  {
    lapply(alias_db$SplitSynonyms[[i]],function(x) geneNames[[ x ]] <- alias_db$Ensembl[i])
  }

我不知道这是否真的有效。 sapply 应该比 for 循环慢,然后我在 strsplit 创建的列表上使用 lapply。环境用作键值字典。 更糟糕的是我没有按要求获得数据帧......

最佳答案

如果我正确理解你的问题,你可以尝试我的“splitstackshape”包中的cSplit,如下所示:

library(splitstackshape)
cSplit(alias_db, "Synonyms", "|", "long")
#    Synonyms             dbXref
# 1:     PA1m ENSMUSG00000030359
# 2:      A2m ENSMUSG00000030359
# 3: AI893533 ENSMUSG00000030359
# 4:      MAM ENSMUSG00000030359
# 5:   AA-NAT ENSMUSG00000020804
# 6:    Nat-2 ENSMUSG00000020804
# 7:     Nat4 ENSMUSG00000020804
# 8:     Snat ENSMUSG00000020804

关于r - 将同义词链接到通用标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29350036/

相关文章:

RStudio : Rook does not work?

r - 将查询嵌入到 R Shiny App 中的数据表显示

c++ - 将字符串拆分为 vector C++

c# - 将字符串拆分为 List<string>

java - Android:分割非常大的字符串

r - 确定一组变量中的任何值是否与另一个变量中的值匹配

R raster::calc 计算分位数 na.rm = FALSE

javascript/regex 忽略双引号中的分号

python - 将 coef 拆分为适用于多类的数组

r - 动态创建带有 Shiny 绘图的选项卡,而无需重新创建现有选项卡