R基于两列合并或查找单元格值

时间:2013-05-10 02:56:42

标签: r dataframe merge

我有两个表,我想将其中一个信息传输到另一个表中。

有名字和子名称。每个名称+子名称组合都有一个与之关联的值,该值在第一步中独立计算。

在下一步中,每个名称都分配了两个特殊的子名称(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'))

1 个答案:

答案 0 :(得分:2)

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')