2016-10-26 71 views
1

我有两个不同的数据框比较来自两个不同实验的基因表达(让我们称它们为df1和df2)。在两个数据框中,第一列是列出感兴趣基因(df1 $基因,df2 $基因)的因子变量。我想找到这些列相交的地方。通常情况下,我只想创建一个使用的东西字符向量就像相交的数据帧列其中值不完全匹配R

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

你可能会在'stringr'与'str_extract'功能开始修修补补包:https://cran.r-project.org/web/packages/stringr/vignettes/stringr.html。如果你可以从'df2'中得到只需要提取你想要的部分的代码,那么你可以使用'match'函数来查找匹配项。 – ulfelder

回答

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> 
相关问题