我有两个表,我想将其中一个信息传输到另一个表中。
有名字和子名称。每个名称+子名称组合都有一个与之关联的值,该值在第一步中独立计算。
在下一步中,每个名称都分配了两个特殊的子名称(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'))
答案 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')