这是How to join (merge) data frames的重复问题。您可以在组内执行left.merge,但不能在整个数据集中执行。 ID是唯一的内部组,不是 acroos组。 不分组并使用left.merge,您将搞乱数据。
我有许多组的数据(面板数据/时间系列)。 在组中,我想通过公共ID合并数据。并在我拥有的所有群组中应用相同的合并(对于所有其他群组,merge
相同)。
#sample data
a<-data.frame(c(1:4,1:4),1,c('a','a','a','a','b','b','b','b'))
b<-data.frame(c(2,4,2,4),10,c('a','a','b','b'))
colnames(a)<-c('id','v','group')
colnames(b)<-c('id','v1','group')
> a
id v group
1 1 1 a
2 2 1 a
3 3 1 a
4 4 1 a
5 1 1 b
6 2 1 b
7 3 1 b
8 4 1 b
> b
id v1 group
1 2 10 a
2 4 10 a
3 2 10 b
4 4 10 b
我尝试使用dplyr group_by (group)
然后使用merge(a,b,by='id',all.x=TRUE)
,但不确定如何将dplyr应用于两个数据集
所需的输出(左合并)
id v group.x v1 group.y
1 1 a NA <NA>
2 1 a 10 a
3 1 a NA <NA>
4 1 a 10 a
1 1 b NA <NA>
2 1 b 10 b
3 1 b NA <NA>
4 1 b 10 b
答案 0 :(得分:2)
您只需在group
参数中包含by
即可:
a %>% left_join(b, by=c("id","group"))
id v group v1 1 1 1 a NA 2 2 1 a 10 3 3 1 a NA 4 4 1 a 10 5 1 1 b NA 6 2 1 b 10 7 3 1 b NA 8 4 1 b 10
这只给你一个&#34;组&#34;对于v1
中没有匹配行的情况,NA
会b
,因此创建两个单独的&#34;组&#34};列是多余的。鉴于该组(可能)代表两个数据框中数据的相同底层划分,那么这样会更好吗?