我有一个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字段my值;我希望能够搜索同义词中的任何名称,然后使用它的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。该环境用作键值字典。更糟的是我没有按要求获得数据.
发布于 2015-03-30 16:36:10
如果我正确理解了您的问题,您可以从我的"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 ENSMUSG00000020804https://stackoverflow.com/questions/29350036
复制相似问题