我有两张桌子需要比较
A栏:Xloc id
B栏:基因ID
A栏:Ensembl id
B栏:基因ID
在两个表中,都有相同的Gene id(名称,例如cpa6)。在表1中有25000个条目,在表2中有46000个条目。
当B列中的两个基因ID匹配并创建带有新数据的输出文件时,我需要将表2中ColA的Ensemble Ids插入表1的ColC中,例如。
表1:
ENS0002 cpa6
表2:
Xloc0014 cpa6
输出文件,表3:
ENS0002 cpa6 Xloc0014
。列不是相同的顺序,不能按字母顺序排序等。剩下的21000条目没有相应的Xlocs我将摆脱(但可以很容易地做到这个后输出)。
有人知道如何在R,Excel或其他软件中执行此操作吗?相对容易吗?
N.B。两个表都不能按相同的顺序排序,所以我真的需要使用公式/脚本/ bash来执行此操作。
答案 0 :(得分:0)
试试这个。我创建了一个示例数据框,以显示如何合并和保留两个表中存在的值。
正如您所看到的,新表是这两个值中存在的值的结果,现在您有3列,其中包含第二个表的值。
如果您想要保留两者中存在的所有行,则必须使用列基因Id,以便保留这两个基因ID。newTable <- merge(tab1,tab2,by = "gen_id")
。
tab1 <- data.frame(col1=c("id1","id2","id3","id4"),col2=c(1,2,3,4))
tab2 <- data.frame(col1=c("id1","id2","id3","id5","id7"),col2=c(1,3,3,5,6))
newTable <- merge(tab1,tab2,by = "col1")
如果你想保留table1中的所有内容,但是在table2中它们可能不存在,请使用它。
newTable <- merge(tab1,tab2,by = "col1",all.x=T)
这些将保留table1的所有行,并在col2.y处给出一个值,否则你将有NA。
答案 1 :(得分:0)
在R中我会使用合并函数merge(Table 1, Table 2,by="cpa6")
。
但是,之前我在Excel中已经完成了这项工作,使用VLOOKUP
函数也很有效。您只需在R中使用IF
函数,其中嵌套VLOOKUP
:
=IF(ISERROR(VLOOKUP(cell with gene name in Table1,array of cells that contain the gen names in Table2, number of the column in the array in Table2,"TRUE" so they match exactly)), Output if true, output if false).
示例:
=IF(ISERROR(VLOOKUP(C4,List1!A1:List1!A$2:A$1000,1,TRUE)), "Does NOT exist in List 1","Exists in List 1")