這是而不是重複問題至How to join (merge) data frames。您可以在組內執行left.merge,但不能執行整個數據集。這個ID是內部的組,而不是 acroos組。 通過不分組和使用left.merge,你會搞砸了數據。按組合並按公用ID合併數據(組外複製ID)
我有很多組數據(面板數據/時間系列)。 在組中,我想通過一個公共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
在dplyr之外,您可以選擇'library(data.table); setDT(b)[a,on =「id」,mult =「first」]' – Frank
'a%>%left_join(b,by = c(「id」,「group」))'。這給你只有一個「組」列,但對於'b'中沒有匹配行的情況,'v1'將是'NA',因此創建兩個單獨的「組」列是多餘的。考慮到'group'(大概)表示兩個數據幀中數據的相同底層劃分,情況會不會更好? – eipi10
我認爲你必須舉一個涵蓋這種情況的例子。無論如何,我不清楚你描述的是什麼擴展。 – Frank