2017-10-23 4 views
1

Ich erwarte, dass dies eine Wiederholung Fragen ist, aber ich habe viele Stunden jetzt versucht, eine Lösung zu finden, und wäre sehr dankbar für einige Hilfe.Subset Datenrahmen mit Datum/Zeit Faktor Variable

Ich habe eine Variable timestamp in einem Datenrahmen, derzeit als Faktor gespeichert. timestamp ist Datum und Uhrzeit im Format TT/MM/JJJJ hh: mm: ss: ssssss

Ich möchte in der Lage sein, den Dataframe mit der Timestamp-Variable, die zum Beispiel alle Zeilen zwischen 09/10/2017 nimmt 00:02:00 und 09/10/2017 00:06:00.

Ich habe versucht, zu einem geordneten Faktor zu konvertieren, und zu POSIXlt, um mit der Teilmenge zu helfen, hatte aber keinen Erfolg.

Sie für jede Hilfe im Voraus Vielen

df <- data.frame(timestamp=c("09/10/2017 00:00:00:000000", "09/10/2017 00:01:00:000000", "09/10/2017 00:02:00:000000", 
       "09/10/2017 00:03:00:000000", "09/10/2017 00:04:00:000000", "09/10/2017 00:05:00:000000", 
       "09/10/2017 00:06:00:000000", "09/10/2017 00:07:00:000000", "09/10/2017 00:08:00:000000", 
       "09/10/2017 00:09:00:000000", "09/10/2017 00:10:00:000000", "09/10/2017 00:00:00:000000", 
       "09/10/2017 00:01:00:000000", "09/10/2017 00:02:00:000000", "09/10/2017 00:03:00:000000", 
       "09/10/2017 00:04:00:000000", "09/10/2017 00:05:00:000000", "09/10/2017 00:06:00:000000", 
       "09/10/2017 00:07:00:000000", "09/10/2017 00:08:00:000000", "09/10/2017 00:09:00:000000", 
       "09/10/2017 00:10:00:000000"), b=c (1:22)) 
+0

Haben Sie das Paket 'lubridate' angeschaut? – steveb

+1

Mögliches Duplikat von [Teilmenge nach Datum in R auswählen] (https://stackoverflow.com/questions/17244077/select-subset-by-date-in-r) – Masoud

Antwort

1

Hier ist eine Lösung lubridate

require(lubridate); 

# Convert timestamps to POSIXct time&date 
df$timestamp <- dmy_hms(gsub(":000000", "", df$timestamp)); 

# These are your query start/stop dates&times 
start <- "09/10/2017 00:02:00"; 
stop <- "09/10/2017 00:06:00"; 
interval <- interval(dmy_hms(start), dmy_hms(stop)); 

# Return entries that fall within query interval 
df[df$timestamp %within% interval, ]; 
#  timestamp b 
#3 2017-10-09 00:02:00 3 
#4 2017-10-09 00:03:00 4 
#5 2017-10-09 00:04:00 5 
#6 2017-10-09 00:05:00 6 
#7 2017-10-09 00:06:00 7 
#14 2017-10-09 00:02:00 14 
#15 2017-10-09 00:03:00 15 
#16 2017-10-09 00:04:00 16 
#17 2017-10-09 00:05:00 17 
#18 2017-10-09 00:06:00 18 

Oder nutzen subset(df, timestamp %within% interval) das gleiche Ergebnis erhalten verwenden. Am besten um dies in eine Funktion für den allgemeinen Gebrauch einzubinden.

Verwandte Themen