2011-11-08 11 views
5

Ciągle czytam o znaczeniu wektorowej funkcjonalności, więc mam nadzieję, że ktoś może mi pomóc tutaj.Wartości wyszukiwania w wektoryzacji

Powiedz, że mam ramkę danych z dwiema kolumnami: nazwa i identyfikator. Teraz mam również inną ramkę danych z nazwą i miejscem narodzin, ale ta ramka danych jest znacznie większa niż pierwsza i zawiera niektóre, ale nie wszystkie nazwy z pierwszej ramki danych. Jak mogę dodać trzecią kolumnę do pierwszej tabeli, która jest wypełniona miejscami narodzin, wyeksponowanymi przy użyciu drugiej tabeli.

Co mam teraz jest:

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

Wydaje się nieefektywne. Myśli? Czy ktokolwiek wie o dobrej książce/źródle dla prawidłowego używania R '? Mam wrażenie, że ogólnie myślę w możliwie najmniej efektywny obliczeniowo sposób.

Dzięki :)

+1

Wystarczy popatrzeć na 'match'? – Andrie

Odpowiedz

6

Zobacz ?merge który wykona łącza bazie seryjnej lub dołączyć.

Oto przykład:

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

co daje:

> 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 

Następnie używamy merge() zrobić to dołączyć:

> 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 
Powiązane problemy