2017-01-05 3 views
-1

Ich habe zwei Datenrahmen.extrahieren Sie die verbleibende Zeit

df1 

      Tstart    Tend  start_temp 
2012-12-19 21:12:00 2012-12-20 02:48:00 17.7637930350627 
2013-01-31 17:36:00 2013-01-31 22:54:00 18.9618654078963 
2013-02-14 09:12:00 2013-02-14 09:48:00 18.2361739981826 
2013-02-21 15:36:00 2013-02-21 16:36:00 20.9938186870285 
2013-03-21 03:54:00 2013-03-21 05:18:00 16.7130008152092 
2013-03-30 23:42:00 2013-03-31 02:30:00 15.3775459369926 

df2 
      datetime airtemp 
2012-12-11 23:00:00 14.40 
2012-12-11 23:06:00 14.22 
2012-12-11 23:12:00 14.04 
2012-12-11 23:18:00 13.86 
2012-12-11 23:24:00 13.68 
2012-12-11 23:30:00 13.50 
...... 
2015-03-31 23:24:00 15.46 
2015-03-31 23:30:00 15.90 
2015-03-31 23:36:00 15.82 
2015-03-31 23:42:00 15.74 

Ich möchte die verbleibende Datumzeit von DF2 extrahieren (DF2 ist eine Zeitreihe) als die Perioden zwischen StartT und Endt in df1. Können Sie mir bitte helfen, dies zu tun? Vielen Dank.

+0

könnten Sie versuchen, 'foverlaps' vom' data.table' Paket. – lukeA

Antwort

0

Mit Base R wir folgende (mit folgenden df1 & df2) versuchen:

df1 <- read.csv(text='Tstart, Tend, start_temp 
2012-12-19 21:12:00, 2012-12-20 02:48:00, 17.7637930350627 
2013-01-31 17:36:00, 2013-01-31 22:54:00, 18.9618654078963 
2013-02-14 09:12:00, 2013-02-14 09:48:00, 18.2361739981826 
2013-02-21 15:36:00, 2013-02-21 16:36:00, 20.9938186870285 
2013-03-21 03:54:00, 2013-03-21 05:18:00, 16.7130008152092 
2013-03-30 23:42:00, 2013-03-31 02:30:00, 15.3775459369926', header=TRUE) 

df2 <- read.csv(text='datetime, airtemp 
2012-12-11 23:00:00, 14.40 
2012-12-11 23:06:00, 14.22 
2012-12-11 23:12:00, 14.04 
2012-12-11 23:18:00, 13.86 
2012-12-11 23:24:00, 13.68 
2012-12-19 23:30:00, 13.50 
2013-03-21 04:24:00, 15.46 
2013-03-21 23:30:00, 15.90 
2015-03-31 23:36:00, 15.82 
2015-03-31 23:42:00, 15.74', header=TRUE) 

df1$Tstart <- strptime(as.character(df1$Tstart), '%Y-%m-%d %H:%M:%S') 
df1$Tend <- strptime(as.character(df1$Tend), '%Y-%m-%d %H:%M:%S') 
df2$datetime <- strptime(as.character(df2$datetime), '%Y-%m-%d %H:%M:%S') 

indices <- sapply(1:nrow(df2), function(j) all(sapply(1:nrow(df1), function(i) df2[j,]$datetime < df1[i,]$Tstart | df2[j,]$datetime > df1[i,]$Tend))) 
df2[indices,] 
#    datetime airtemp 
#1 2012-12-11 23:00:00 14.40 
#2 2012-12-11 23:06:00 14.22 
#3 2012-12-11 23:12:00 14.04 
#4 2012-12-11 23:18:00 13.86 
#5 2012-12-11 23:24:00 13.68 
#8 2013-03-21 23:30:00 15.90 
#9 2015-03-31 23:36:00 15.82 
#10 2015-03-31 23:42:00 15.74 
+0

Vielen Dank. Leider gibt es nur für den Code df2 $ datetime <- strptime (df2 $ datetime, '% Y-% m-% d% H:% M:% S') den folgenden Fehler. Fehler in '[<-. Data.table' (x, j = Name, Wert = Wert): (Liste) -Objekt kann nicht gezwungen werden, 'doppelt' einzugeben Zusätzlich: Warnmeldung: In' [<- .data.table' (x, j = Name, Wert = Wert): Geliefert 11 Elemente zu 2 Elemente der Spalte 'datetime' zugewiesen (9 unbenutzt) – Ushi

+0

Ich denke, Sie haben data.table, können Sie stattdessen Datenrahmen haben ? Der Code wurde aktualisiert und die Erstellung der Datenrahmen hinzugefügt. Wenn Sie Ihre Daten im selben Format haben, sollte es funktionieren. Probieren Sie den obigen Beispielcode zuerst aus. –

Verwandte Themen