如何将一个数据框中的rowname与另一个数据框相匹配并提取相应的列(如果存在)?

时间:2015-10-08 14:39:21

标签: r

我有一个简单的问题,但无法弄清楚如何做到这一点。

我有两个数据框mydfamydfb。我想将mydfa中的rownames与mydfb中的rownames匹配,并将mydfb的c列中的项目提取到mydfa(如果存在)并获得结果。

mydfa

rownames  x y z  
app3      1 3 4
app2      1 4 4
app5      1 4 5

mydfb

 rownames     a b c 
    app1      5 4 2
    app3      5 5 6 
    app4      5 4 7
    app5      5 3 8

结果

 rownames     x y z  c  
    app3      1 3 4  6
    app2      1 4 4  NA
    app5      1 4 5  8

1 个答案:

答案 0 :(得分:1)

使用match计算出哪个行名映射到哪里,然后用第二个数据框的行对其进行子集化:

> mydfa$c = mydfb[match(row.names(mydfa), row.names(mydfb)),"c"]
> mydfa
     x y z  c
app3 1 3 4  6
app2 1 4 4 NA
app5 1 4 5  8

要了解其工作原理,请将其拆开:

> match(row.names(mydfa), row.names(mydfb))
[1]  2 NA  4

表示mydfa中的第一行名称是mydfb中的第二行,第二个rowname没有匹配,第三行名称与mydfb中的第四行匹配。然后,使用方括号的子集获取第二个元素NA,以及来自mydfb$c的第四个元素,并创建mydfa$c