我一直在阅读矢量化功能的重要性,所以希望有人可以帮助我。
假设我有一个包含两列的数据框:name
和ID
。现在我还有另一个带有名称和出生地的数据框,但是这个数据框比第一个数据框大得多,并且包含第一个数据框中的一些但不是全部的名称。如何将第三列添加到使用第二个表查找的出生地填充的第一个表中。
我现在拥有的是:
corresponding.birthplaces <- sapply(table1$Name,
function(name){return(table2$Birthplace[table2$Name==name])})
这似乎效率低下。思考?有没有人知道正确使用R'的好书/资源。我觉得我一般都认为计算效率最低的方式可以想象。
谢谢:)
答案 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