2016-05-01 7 views
5

Ich brauche Hilfe bei diesem Problem:Wie wählt man stündliche Werte aus dem Datensatz?

Ich habe einen Datensatz der Wasserstandswerte verteilt alle 30 Minuten, aber ich brauche nur die stündlichen Werte. Ich versuchte mit der aggregate() Funktion, aber wegen der Funktion FUN ist eine Voraussetzung, die es bestimmt meine Analyse, um gemein zu sein, oder Median, und ich will keine Statistikfunktion verwenden.

Dieses Beispiel meines Datenrahmen

06/16/2015 02:00:00 0.036068 
06/16/2015 02:30:00 0.008916 
06/16/2015 03:00:00 -0.008622 
06/16/2015 03:30:00 -0.014057 
06/16/2015 04:00:00 -0.011172 
06/16/2015 04:30:00 0.002401 
06/16/2015 05:00:00 0.029632 
06/16/2015 05:30:00 0.061902002 
06/16/2015 06:00:00 0.087366998 
06/16/2015 06:30:00 0.105176002 
06/16/2015 07:00:00 0.1153 
06/16/2015 07:30:00 0.126197994 
06/16/2015 08:00:00 0.144154996 
+1

Damit wird jede zweite Zeile ausgewählt: 'DF [c (TRUE, FALSE),]' beginnend mit der ersten Zeile. –

+0

Danke, das ist ok und hat mir geholfen! aber ich habe einen anderen Datensatz, in dem der Zeitschritt 1 Minute ist. In diesem Fall würde ich einen anderen Algorithmus benötigen, um stündliche Werte zu wählen. – FernRay

+0

Ich versuchte es mit dieser Funktion zu tun: – FernRay

Antwort

2

Wir wandeln die Spalte ‚RefDateTimeRef‘ zu POSIXct, extrahieren Sie die ‚Minute‘, ‚zweiten‘ mit format und vergleichen Sie es mit 00:00 einen logischen Vektor zurück die Wir verwenden, um die Zeilen zu unterteilen.

df1[format(as.POSIXct(df1[,1], format = "%m/%d/%Y %H:%M"), "%M:%S")=="00:00",] 
#  RefDateTimeRef Data 
#10 04/14/2016 09:00 0.153 
#22 04/14/2016 08:00 0.148 

Oder mit lubridate

library(lubridate) 
df1[ minute(mdy_hm(df1[,1]))==0,] 
#  RefDateTimeRef Data 
#10 04/14/2016 09:00 0.153 
#22 04/14/2016 08:00 0.148 

Oder mit sub den Teil bis zur Stunde Teil zu entfernen und dann == verwenden, um die logische Vektor und Teilmenge der Zeilen zu erhalten.

df1[ sub(".*\\s+\\S{2}:", "", df1[,1])=="00",] 

HINWEIS: Ich würde empfehlen gegen die Verwendung von sub oder substr wie es manchmal zu falschen Antworten führen kann.

3
df <- read.table(text = '06/16/2015 02:00:00 0.036068 
06/16/2015 02:30:00 0.008916 
06/16/2015 03:00:00 -0.008622 
06/16/2015 03:30:00 -0.014057 
06/16/2015 04:00:00 -0.011172 
06/16/2015 04:30:00 0.002401 
06/16/2015 05:00:00 0.029632 
06/16/2015 05:30:00 0.061902002 
06/16/2015 06:00:00 0.087366998 
06/16/2015 06:30:00 0.105176002 
06/16/2015 07:00:00 0.1153 
06/16/2015 07:30:00 0.126197994 
06/16/2015 08:00:00 0.144154996') 

colnames(df) <- c('Date','Time','Value') 

index <- ifelse(substring(df$Time,4) == "00:00",T,F) 

final_df <- df[index,] 
Verwandte Themen