我有两个不同的数据框架比较来自两个不同实验的基因表达(让我们称之为df1和df2)。在两个数据框中,第一列是一个因子变量,列出了感兴趣的基因(df1 $ gene,df2 $ gene)。我想找到这些列相交的位置。通常我会使用类似
的东西创建一个角色向量 common<-Reduce(intersect, list(df1$gene,df2$gene))
我的问题是关于在这种情况下如何鉴定基因的格式不同(因为它们来自不同的人)。例如,df1 $基因单独使用常规缩写(因为它应该用于简单的数据分析),而df2 $基因包括在括号中包含缩写的描述。描述有时也包含独立于缩写的括号,有时只使用缩写而没有任何描述或括号。下面我已经包含了每个数据集中三行的模拟打印。请注意,对于每个df,这些是相同的三个基因(以不同的顺序)。
head (df1$genes, n=3)
[1] TFPI2 SLC26A9 IL6
head (df2$genes, n=3)
[1] solute carrier family 26, member 9 (SLC26A9) interleukin 6 (interferon, beta 2) (IL6), TFPI2
我想要的只是这些列表相交的输出,格式为df1标签(即只是缩写)。我很擅长使用R,并且无法弄清楚如何做到这一点。任何帮助表示赞赏!
答案 0 :(得分:0)
根据您的完整数据集的混乱程度,您可以将大量这些与agrep
匹配,例如:
genes1 <- c("TFPI2", "SLC26A9", "IL6", "TP53")
genes2 <- c("solute carrier family 26, member 9 (SLC26A9)",
"interleukin 6 (interferon, beta 2) (IL6)",
"TFPI2")
# fuzzy string matching
matches <- sapply(genes1, agrep, genes2)
# find 0 length matches (misses),
# could also handle >1 matches here
matches[sapply(matches, length) == 0] <- NA
data.frame(
symbol = genes1,
match = genes2[unlist(matches)]
)
# symbol match
# 1 TFPI2 TFPI2
# 2 SLC26A9 solute carrier family 26, member 9 (SLC26A9)
# 3 IL6 interleukin 6 (interferon, beta 2) (IL6)
# 4 TP53 <NA>