2011-11-08 35 views
5

Tôi tiếp tục đọc về tầm quan trọng của chức năng vectơ để hy vọng ai đó có thể giúp tôi ở đây.Giá trị tra cứu theo cách được vectorized

Giả sử tôi có khung dữ liệu với hai cột: tên và ID. Bây giờ tôi cũng có một khung dữ liệu khác với tên và nơi sinh, nhưng khung dữ liệu này lớn hơn nhiều so với cái đầu tiên, và chứa một số nhưng không phải tất cả các tên từ khung dữ liệu đầu tiên. Làm thế nào tôi có thể thêm một cột thứ ba vào bảng đầu tiên được điền với các chỗ sinh đã tra cứu bằng cách sử dụng bảng thứ hai.

Những gì tôi có bây giờ là là:

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

Điều này có vẻ không hiệu quả. Suy nghĩ? Có ai biết một cuốn sách/tài nguyên tốt để sử dụng R 'đúng' .. Tôi có được cảm giác mà tôi thường nghĩ theo cách hiệu quả nhất có thể tính toán được.

Cảm ơn :)

+1

Hãy nhìn vào 'match'? – Andrie

Trả lời

6

Xem ?merge sẽ thực hiện liên kết hoặc tham gia liên kết cơ sở dữ liệu.

Dưới đây là một ví dụ:

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

mang đến cho:

> 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 

Sau đó, chúng tôi sử dụng merge() để làm tham gia:

> 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 
Các vấn đề liên quan