【问题标题】:R merge or lookup cell value based on two columnsR基于两列合并或查找单元格值
【发布时间】:2013-05-10 02:56:42
【问题描述】:

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

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

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

【问题讨论】:

  • 你研究过 merge() 和 match() 吗?

标签: r dataframe merge


【解决方案1】:

等等:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 2020-05-31
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    相关资源
    最近更新 更多