我有一个 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/