[英]R merge or lookup cell value based on two columns
我有兩個表,我想將其中一個信息傳輸到另一個表。
有名字和子名稱。 每個名稱+子名稱組合都有一個與之關聯的值,該值在第一步中獨立計算。
在下一步中,為每個名稱分配兩個特殊的子名稱(sub1和sub2),我需要檢索與每個名稱+子名稱對相關聯的值。
換句話說,對於每個名稱,我需要檢索name + sub1的值和name + sub2的值。
在第一個表中,每一行都有一個名稱,以及每個可能的子名稱的值。 這里的子名稱為x
, y
, w
和z
。 值是數字。
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
這些是復制/可粘貼的樣本表(第一個表實際上有~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'))
Etvoilà:
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')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.