以矢量化方式查找值

Jos*_*hDG 5 r

我一直在阅读矢量化功能的重要性,所以希望有人可以帮助我.

假设我有一个包含两列的数据框:名称和ID.现在我还有另一个带有名称和出生地的数据框,但是这个数据框比第一个数据框大得多,并且包含第一个数据框中的一些但不是全部的名称.如何将第三列添加到使用第二个表查找的出生地填充的第一个表中.

我现在拥有的是:

corresponding.birthplaces <- sapply(table1$Name, 
   function(name){return(table2$Birthplace[table2$Name==name])})
Run Code Online (Sandbox Code Playgroud)

这似乎效率低下.思考?有没有人知道使用R'正确'的好书/资源.我感觉我通常以可计算的最低效计算方式思考.

谢谢 :)

Rei*_*son 6

查看?merge哪个将执行数据库链接合并或连接.

这是一个例子:

set.seed(2)
d1 <- data.frame(ID = 1:5, Name = c("Bill","Bob","Jessica","Jennifer","Robyn"))
d2 <- data.frame(Name = c("Bill", "Gavin", "Bob", "Joris", "Jessica", "Andrie", 
                          "Jennifer","Joshua","Robyn","Iterator"),
                 Birthplace = sample(c("London","New York",
                                       "San Francisco", "Berlin",
                                       "Tokyo", "Paris"), 10, rep = TRUE))
Run Code Online (Sandbox Code Playgroud)

这使:

> d1
  ID     Name
1  1     Bill
2  2      Bob
3  3  Jessica
4  4 Jennifer
5  5    Robyn
> d2
       Name    Birthplace
1      Bill      New York
2     Gavin         Tokyo
3       Bob        Berlin
4     Joris      New York
5   Jessica         Paris
6    Andrie         Paris
7  Jennifer        London
8    Joshua         Paris
9     Robyn San Francisco
10 Iterator        Berlin
Run Code Online (Sandbox Code Playgroud)

然后我们merge()用来做连接:

> merge(d1, d2)
      Name ID    Birthplace
1     Bill  1      New York
2      Bob  2        Berlin
3 Jennifer  4        London
4  Jessica  3         Paris
5    Robyn  5 San Francisco
Run Code Online (Sandbox Code Playgroud)