1

我有两个这样的数据框:

节点:

new_id  Name  old_id
1        foo    560
2        fie    561
3        fee    562
4        fim    563

相对:

StartID   EndID
560       561
561       563
561       562
563       560

第二个文件中的 ID 是第一个文件中的旧 ID。我想根据第一个文件中的匹配行更新第二个文件中的 ID。

期望的结局:

StartID  EndID
1         2
2         4
2         3
4         1

我在看replace(),但不清楚如何在不知道索引的情况下使用它。

4

2 回答 2

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
于 2013-08-19T21:40:02.393 回答
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
于 2013-08-19T22:23:42.720 回答