2017-06-06 2 views
1

Wie wird ein Datenrahmen von einem anderen Datenrahmen unterschiedlicher Länge subset? zB: Ich habe zwei Datenrahmen, df1 und df2, wie kann ich Teilmenge df1 mit df2 's Year, Month, Day, Hour so wird es so etwas wie die Expected Outcome werden?Wie wird ein Datenrahmen von einem anderen Datenrahmen mit unterschiedlicher Länge subsettiert?

Wo Year, Month, Day, Hour von Zeile 4, 6, 7 in df1 Spielen df2 ‚s Reihe 1, 2, 3, so dass nur die Zeile 4, 6, 7 in df1 in dem erwarteten Ergebnis.

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 

Erwartete Ergebnisse

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

Sie können es mit 'merge' machen, aber dann müssen Sie die Spalten aus' df2' filtern, 'merge (df1, df2, by = c (" Jahr "," Monat "," Tag "," Stunde "))'. –

Antwort

2

können Sie dieverwendenFunktion von dplyr:

library(dplyr) 

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

Dies wird nur die Zeilen in df1 zurück, die in df2 von Jahr, Monat, Tag und Stunde Spalten abgestimmt ist. Im Gegensatz zu einigen anderen Joins mutiert es nicht, was bedeutet, dass es die Spalten df2 nicht zum Ergebnis hinzufügen wird.

+1

Definitiv eleganter als mit 'inner_join'. :) –

+0

Super! Vielen Dank. – Jimmy

Verwandte Themen