簡體   English   中英

R基於兩列合並或查找單元格值

[英]R merge or lookup cell value based on two columns

我有兩個表,我想將其中一個信息傳輸到另一個表。

有名字和子名稱。 每個名稱+子名稱組合都有一個與之關聯的值,該值在第一步中獨立計算。

在下一步中,為每個名稱分配兩個特殊的子名稱(sub1和sub2),我需要檢索與每個名稱+子名稱對相關聯的值。

換句話說,對於每個名稱,我需要檢索name + sub1的值和name + sub2的值。

在第一個表中,每一行都有一個名稱,以及每個可能的子名稱的值。 這里的子名稱為xywz 值是數字。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM