我有两个像这样的数据框:
节点:
new_id Name old_id
1 foo 560
2 fie 561
3 fee 562
4 fim 563
RELS:
StartID EndID
560 561
561 563
561 562
563 560
第二个文件中的ID是第一个中的旧ID。我想根据第一个文件中的匹配行更新第二个文件中的ID。
期望结束:
StartID EndID
1 2
2 4
2 3
4 1
我在看replace()
,但我不清楚如何在不知道指数的情况下使用它。
答案 0 :(得分:4)
将old_id
映射到new_id
(map <- setNames(nodes$new_id, nodes$old_id))
#560 561 562 563
# 1 2 3 4
以及使用它的一种方法是以下
apply(rels, 2, function(x) map[as.character(x)])
# StartID EndID
#[1,] 1 2
#[2,] 2 4
#[3,] 2 3
#[4,] 4 1
答案 1 :(得分:3)
match
函数(将索引返回到new_id)就是您所寻找的:
cbind(StartID = Nodes$new_id[match( Rels$StartID ,Nodes$old_id)] ,
EndID = Nodes$new_id[match( Rels$EndID ,Nodes$old_id)] )
StartID EndID
[1,] 1 2
[2,] 2 4
[3,] 2 3
[4,] 4 1