以矢量化方式查找值

时间:2011-11-08 21:11:27

标签: r

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

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

我现在拥有的是:

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

这似乎效率低下。思考?有没有人知道正确使用R'的好书/资源。我觉得我一般都认为计算效率最低的方式可以想象。

谢谢:)

1 个答案:

答案 0 :(得分: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