2013-05-10 47 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