2011-11-08 80 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