2016-07-06 13 views
1

Der DatensatzTeilmenge von Daten mit Zeitstempel unabhängig von Datum in R

head(data) 
       Date OPEN 
2015-11-30 10:00:00 951.15 
2015-11-30 10:30:00 949.90 
2015-11-30 11:00:00 943.45 
2015-11-30 11:30:00 944.30 
2015-11-30 12:00:00 942.00 
2015-11-30 12:30:00 940.60 
2015-01-01 10:00:00 951.15 
2015-01-01 10:30:00 949.90 
2015-01-02 10:30:00 943.45 
2015-01-02 11:30:00 944.30 
2015-01-03 10:00:00 943.45 
2015-01-03 10:30:00 943.45 
2015-01-03 11:30:00 944.30 
2015-01-06 10:00:00 942.00 
2015-01-06 10:30:00 940.60 
2015-01-06 11:00:00 940.60 
2015-01-06 11:30:00 942.00 

str(data) 
'data.frame': 32023 obs. of 2 variables: 
$ Date  : POSIXct, format: "2015-11-30 10:00:00" "2015-11-30 10:30:00" "2015-11-30 11:00:00" ... 
$ OPEN  : num 951 950 943 944 942 ... 

Hallo, Datenrahmen ist oben erwähnt. Ich möchte OPEN-Preise mit Zeitstempeln 10:00 and 10:30 für alle verfügbaren Daten extrahieren. Ich brauche nur Zeitstempel 10:00 to 10:30 im Filterzustand irrespective of dates. Bitte schlagen Sie in R vor. Danke.

Antwort

2

Wir können das ‚Datum‘ format den HH:MM Teil zu extrahieren, verwenden %in% auf, dass eine logische vector und subset Basis zu erhalten.

subset(data, format(Date, "%H:%M") %in% c("10:00", "10:30"), select="OPEN") 
#  OPEN 
#1 951.15 
#2 949.90 
#7 951.15 
#8 949.90 
#9 943.45 
#11 943.45 
#12 943.45 
#14 942.00 
#15 940.60 

Wenn es between diese Intervalle

library(chron) 
subset(data, between(times(format(Date, "%H:%M:%S")) , 
           times("10:00:00"), times("10:30:00"))) 
+1

chron mit sieht einfach perfekt. muss es überprüfen. Vielen Dank. – Zico

+0

Dieser Teilmengenbefehl funktionierte zu dieser Zeit. Aber jetzt funktioniert das nicht. Dieser Fehler wird angezeigt - Fehler in UseMethod ("between"): keine anwendbare Methode für "between" angewendet auf ein Objekt der Klasse "times". Datensatz ist gleich. Können Sie bitte vorschlagen. – Zico

+0

@Zico 'between' Funktion kann in' dplyr' und 'data.table' gefunden werden. Möglicherweise müssen Sie also eines dieser Pakete laden, und es sollte funktionieren. – akrun

2

können Sie lubridate Paket verwenden, um eine freundliche Untergruppe zu machen:

library(lubridate) 
res <- subset(data, minute(Date) <=30 & hour(Date) == 10) 
+0

in diesem Fall muss ich zuerst tun, wie folgt: Minute (Datum)> = 30 & Stunde (Datum)> = 10 und dann wieder wie zu tun, dass auf Ausgabe der ersten EQN: Minute (Datum) <= 30 & Stunde (Datum) <= 15. Es ist nicht ein Liner, aber hat mich heute gerettet. – Zico

Verwandte Themen