我有一个简单的问题,但无法弄清楚如何做到这一点。
我有两个数据框mydfa
和mydfb
。我想将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
答案 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
。