Поиск значений в векторизации - PullRequest
5 голосов
/ 09 ноября 2011

Я продолжаю читать о важности векторизованной функциональности, так что, надеюсь, кто-нибудь может помочь мне здесь.

Скажем, у меня есть фрейм данных с двумя столбцами: name и ID. Теперь у меня также есть другой фрейм данных с именем и местом рождения, но этот фрейм данных намного больше первого и содержит некоторые, но не все имена из первого фрейма данных. Как я могу добавить третий столбец к первой таблице, которая заполнена местами рождения, найденными с использованием второй таблицы.

Теперь у меня есть:

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

Это кажется неэффективным. Мысли? Кто-нибудь знает хорошую книгу / ресурс для правильного использования R ... У меня такое ощущение, что я вообще думаю, что думаю, что это будет наименее вычислительно эффективным способом.

Спасибо:)

1 Ответ

6 голосов
/ 09 ноября 2011

См. ?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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...