2011-11-08 37 views
5

我一直在阅读矢量化功能的重要性,所以希望有人能帮助我。以矢量化方式查找值

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

我有什么,现在是:

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

这似乎效率不高。思考?有没有人知道一本好书/正确使用R'的资源..我的感觉是,我一般都会用计算有效的方式来思考。

谢谢:)

+1

看一看'match'? – Andrie

回答

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)) 

这给:

> 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 

然后我们使用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