2017-06-06 42 views
1

如何從另一個長度不同的數據幀中對數據幀進行子集劃分? 例如:我有兩個數據幀,df1df2,我如何使用df2df1Year, Month, Day, Hour所以它會變成類似於Expected Outcome如何從另一個不同長度的數據框中對數據幀進行子集劃分?

Year, Month, Day, Hour從第4行,6,7在df1比賽df2的行1,2,3,從而只有第4行,6,7在df1是在預期的結果。

DF1

V1 Year Month Day Hour Min Sec Weight 
1 1640 1999 02 05 04 00 00 1.936074 
2 1519 1999 02 10 12 00 00 1.944277 
3 1219 1999 02 25 16 00 00 1.947789 
4 1720 1999 03 11 16 00 00 1.946841 
5 1782 1999 03 18 08 00 00 1.956711 
6 1523 1999 03 24 12 00 00 1.965768 
7 1153 1999 04 01 16 00 00 1.981121 
8 1262 1999 04 08 16 00 00 1.987066 
9 1860 1999 04 15 00 00 00 1.982274 
10 1624 1999 04 28 08 00 00 1.999045 

DF2

V1 Year Month Day Hour Min Sec Weight 
1 3587 1999 03 11 16 00 00 2.836074 
2 4675 1999 03 24 12 00 00 2.854277 
3 3592 1999 04 01 16 00 00 2.917789 
4 2980 1999 04 12 16 00 00 2.926841 
5 2857 1999 04 18 16 00 00 2.986711 

預期結果

V1 Year Month Day Hour Min Sec Weight 
4 1720 1999 03 11 16 00 00 1.946841 
6 1523 1999 03 24 12 00 00 1.965768 
7 1153 1999 04 01 16 00 00 1.981121 
+1

你可以用'merge'做到這一點,但你需要從'df2','合併(DF1,DF2篩選列,通過= C( 「年」, 「月」, 「日」,「小時「))'。 –

回答

2

可以使用從功能:

library(dplyr) 

semi_join(df1, df2, by = c("Year", "Month", "Day", "Hour")) 

這將df1了在df2的年,月,日和時列匹配只返回行。與其他一些連接不同,它不是變異的,這意味着它不會將df2的列添加到結果中。

+1

絕對比使用'inner_join'更優雅。 :) –

+0

太棒了!謝謝。 – Jimmy

相關問題