2013-05-10 46 views
3

我有两个表,我想从其中一个表中传输信息到另一个表中。R合并或基于两列的查找单元格值

有名称和子名称。每个名称和子名称组合都有一个与其相关的值,它在第一步中独立计算。

在下一步中,为每个名称分配两个特殊的子名称(sub1和sub2),并且我需要检索与每个名称和子名称对关联的值。

换句话说,对于每个名称,我需要检索name + sub1的值和name + sub2的值。

在第一个表格中,每行都有一个名称和每个可能的子名称的值。这里的子名称分别叫做x,y,wz。值是数字。

Name x y w z 
abc  4 8 3 1 
def  2 5 1 7 

在第二个表格中,每行在第一列中有一个名称,在下两列中有两个相关的子名称。两个表都有第一列中的全部名称,但第二个表中不是每个子名都存在于第一个表中。对于这些行,只需返回“NA”即可。

Name Sub1  Sub2 
abc  x   y 
def  w   z 

我想,所以我得到这样的事情对这些表结合起来:

Name Sub1  Sub2 Sub1.Value Sub2.Value 
abc  x   y  4    8 
def  w   z  1    7 

这些拷贝/ pasteable示例表(第一个表中实际上有〜1K行和30K〜列)。

first.table=data.frame(Name=c('abc','def'),x=c(4,2),y=c(8,5),w=c(3,1),z=c(1,7)) 
second.table=data.frame(Name=c('abc','def'),Sub1=c('x','w'),Sub2=c('y','z')) 
+0

你看着合并()和匹配()? – 2013-05-10 03:00:28

回答

2

的Et瞧:

library(reshape2) 
# melt into long format 
ldf <- melt(first.table,id.vars='Name') 

# merge on Name and the Sub's 
second.table <- merge(second.table,ldf,by.x=c('Name','Sub1'),by.y=c('Name','variable')) 
second.table <- merge(second.table,ldf,by.x=c('Name','Sub2'),by.y=c('Name','variable')) 

# rename columns to the correct values 
colnames(second.table)[4:5] <- c('Sub1.Value','Sub2.Value') 
+0

完美,谢谢。 – user2034412 2013-05-10 03:39:00