3

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

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

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

1 回答 1

2

等等:

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')
于 2013-05-10T03:13:10.107 回答