2014-02-12 39 views
0

我有两个dataframes结构如下 数据库称为“笔记”匹配信息

id breed gender date  text 
1 NA  NA  01/01/2000 fdsgkefge 
1 NA  NA  01/02/2001 glerlefde 
2 NA  NA  02/01/2000 ddubgui 
2 NA  NA  02/01/2000 sdfsfbfb 
1 NA  NA  02/03/2002 geherhwt 
3 NA  NA  10/10/2003 dggqgeqgr 
4 NA  NA  21/07/2003 ssihiqgho 

数据库与人口信息“演示”

id breed gender 
1 A  M 
2 B  F 
3 B  M 
4 C  M 

我想最终datafrane如下:

id breed gender date  text 
1 A  M  01/01/2000 fdsgkefge 
1 A  M  01/02/2001 glerlefde 
2 B  F  02/01/2000 ddubgui 
2 B  F  02/01/2000 sdfsfbfb 
1 A  M  02/03/2002 geherhwt 
3 B  M  10/10/2003 dggqgeqgr 
4 C  M  21/07/2003 ssihiqgho 

我写了这段代码不工作:

for(i in 1:length(practice)){ 
    notes$breed[i]<-demo$breed[demo$id==notes$id[i]], 
    notes$gender[i]<-demo$gender[demo$id==notes$id[i]] 
} 

也许循环在这里不是一个好主意,我确定必须有一个函数来排序(尝试匹配()而没有成功),只是不知道要寻找什么函数。任何帮助? 干杯 马尔科

+2

使用'merge()'连接表。 – Andrie

回答

2

如果行和列的顺序并不重要,这里有一些选择,而不同表现在:

merge(x=notes[, c("id", "date", "text")], y=demo, by="id") 
# id  date  text breed gender 
# 1 1 01/01/2000 fdsgkefge  A  M 
# 2 1 01/02/2001 glerlefde  A  M 
# 3 1 02/03/2002 geherhwt  A  M 
# 4 2 02/01/2000 ddubgui  B  F 
# 5 2 02/01/2000 sdfsfbfb  B  F 
# 6 3 10/10/2003 dggqgeqgr  B  M 
# 7 4 21/07/2003 ssihiqgho  C  M 

library(dplyr) 
left_join(notes[, c("id", "date", "text")], demo) 
# id  date  text gender breed 
# 1 1 01/01/2000 fdsgkefge  M  A 
# 2 1 01/02/2001 glerlefde  M  A 
# 3 2 02/01/2000 ddubgui  F  B 
# 4 2 02/01/2000 sdfsfbfb  F  B 
# 5 1 02/03/2002 geherhwt  M  A 
# 6 3 10/10/2003 dggqgeqgr  M  B 
# 7 4 21/07/2003 ssihiqgho  M  C 

library(data.table) 
demo.dt <- data.table(demo, key="id") 
notes.dt <- data.table(notes[, c("id", "date", "text")]) 
demo.dt[notes.dt] 
# id breed gender  date  text 
# 1: 1  A  M 01/01/2000 fdsgkefge 
# 2: 1  A  M 01/02/2001 glerlefde 
# 3: 2  B  F 02/01/2000 ddubgui 
# 4: 2  B  F 02/01/2000 sdfsfbfb 
# 5: 1  A  M 02/03/2002 geherhwt 
# 6: 3  B  M 10/10/2003 dggqgeqgr 
# 7: 4  C  M 21/07/2003 ssihiqgho 
1

非常感谢,我也得到了一些帮助,在这里工作(虽然合并选项似乎是最简单的)所以我想我也为了完整性而添加这一个

notes[,"breed"] <- demo[notes[,"id"],"breed"] 
notes[,"gender"] <- demo[notes[,"id"],"gender"] 

非常感谢! Marco

相关问题