2017-02-20 3 views
1

Das erste df enthält die Werte der Temperaturmessungen alle 30 Minuten für 2 Monate von Sensoren an verschiedenen Orten. Sieht ungefähr so ​​aus:Unterteilen Sie einen Datenrahmen nach Datetime (POSIXlt) -Werten mit Datetime (POSIXtl) -Werten von einem anderen Datenrahmen in R

 date_time   id  Temp 
2012-02-27 00:11:00 | Sens_1 | 23.0 
2012-02-27 00:11:30 | Sens_1 | 23.4 
2012-02-27 00:12:00 | Sens_1 | 24.6 
2012-02-27 00:12:30 | Sens_1 | 25.2 
2012-02-27 00:13:00 | Sens_1 | 25.5 
2012-02-27 00:13:30 | Sens_1 | 26.3 
      :    :   : 
2012-02-27 00:11:00 | Sens_2 | 34.6 
2012-02-27 00:11:30 | Sens_2 | 33.4 
2012-02-27 00:12:00 | Sens_2 | 34.6 
2012-02-27 00:12:30 | Sens_2 | 35.4 
2012-02-27 00:13:00 | Sens_2 | 36.5 
2012-02-27 00:13:30 | Sens_2 | 38.8 
      :     :   : 
2012-02-27 00:11:00 | Sens_3 | 14.6 
2012-02-27 00:11:30 | Sens_3 | 14.4 
2012-02-27 00:12:00 | Sens_3 | 13.6 
2012-02-27 00:12:30 | Sens_3 | 15.4 
2012-02-27 00:13:00 | Sens_3 | 15.5 
2012-02-27 00:13:30 | Sens_3 | 16.8 
      :     :   : 

Die zweite df hat nur eine Spalte mit den Datums- und Uhrzeitwerten, die zuvor aufgrund anderer Constraints gefiltert wurden und haben so nur einen Teil der Datums- und Uhrzeitwerte. Zum Beispiel:

date_time   
2012-02-27 00:11:00 
2012-02-27 00:12:00 
2012-02-27 00:12:30 
2012-02-27 00:13:30 
      :  

Was ich bekommen will, ist so etwas wie diese:

date_time   id  Temp 
2012-02-27 00:11:00 | Sens_1 | 23.0 
2012-02-27 00:12:00 | Sens_1 | 24.6 
2012-02-27 00:12:30 | Sens_1 | 25.2 
2012-02-27 00:13:30 | Sens_1 | 26.3 
      :    :   : 
2012-02-27 00:11:00 | Sens_2 | 34.6 
2012-02-27 00:12:00 | Sens_2 | 34.6 
2012-02-27 00:12:30 | Sens_2 | 35.4 
2012-02-27 00:13:30 | Sens_2 | 38.8 
      :     :   : 
2012-02-27 00:11:00 | Sens_3 | 14.6 
2012-02-27 00:12:00 | Sens_3 | 13.6 
2012-02-27 00:12:30 | Sens_3 | 15.4 
2012-02-27 00:13:30 | Sens_3 | 16.8 
      :     :   : 

Vielen Dank im Voraus für jede Hilfe.

+2

'merge (df1, df2)' – Gregor

+0

'do.call (rbind, lapply (geteilt (df1, df1 $ id), Funktion (x) x [x $ date_time% in% df2 $ date_time,]))' –

+0

Vielen Dank für Ihre schnelle Antworten db Antwort funktioniert gut @Gregor: 'merge' hat nicht funktioniert und wirft diesen Fehler: Fehler in sort.list (bx [m $ xi]): 'x' muss atomar sein für ' sort.list ' Haben Sie' sort 'auf einer Liste aufgerufen? Es wird angenommen, dass es sich bei den Daten nicht um einen data.frame, sondern um eine Liste handelt. Ich versuchte 'str' in beiden df und sagt dies: 'str (sens) ' data.frame ': \t 3342 obs. von 3 var $ id: chr "Sens_1" .. $ fechahora: POSIXlt, Format: "2014-01-01 00:00:00" .. $ valor: num 22.3 .. ' – NewUser

Antwort

2

Eine Möglichkeit, das zu tun, ist ein Rechts-Join. Sie können dplyr verwenden:

library(dplyr) 
df1 %>% right_join(df2) 

Hier einige useful documentation.

+0

Danke für die Antwort, aber ich habe einen Fehler bekommen . Join von: "datetime" Fehler: kann nicht bei Spalten 'datetime' x 'datetime': nicht bei 'datetime' x 'datetime' wegen inkompatiblen Typen (POSIXlt, POSIXt/POSIXlt, POSIXt) – NewUser

+0

Das kann Fehler schlägt vor, dass Ihre zwei date_time Spalten nicht vom gleichen Typ sind. Wenn sie wären, würde der Join funktionieren. Auch für die Verbindung zur Arbeit sollte 'date_time' in beiden Datenrahmen als POSIXct gespeichert werden. – neilfws

Verwandte Themen