2016-04-11 7 views
-2

Ich habe folgende CSV-Datei:Filtering Datenrahmen von Daten für Zoo-Haltepunkte

   f  , c 
     1,19/11/2014 12:00,0.01 
     2,19/11/2014 13:00,0.01 
     3,20/11/2014 15:00,0.01 
     4,20/11/2014 16:00,0.01 
     5,20/11/2014 17:00,0.01 
     6,20/11/2014 19:00,0.01 
     7,20/11/2014 22:00,0.20 
     8,20/11/2014 23:00,0.03 
     9,21/11/2014 16:00,0.01 
     10,21/11/2014 17:00,0.01 

ich die CSV-Datei zu lesen, die unter Verwendung folgender:

library(strucchange) 
ts1<-read.csv (file.choose()) 

Ich mag würde alle Zeilen filtern zwischen angegebene Daten (DATUM1 und DATUM2).

DATE1 <- as.Date("20/11/2014 16:00", format = "%d/%m/%Y %H:%M") 
DATE2 <- as.Date("20/11/2014 23:00", format = "%d/%m/%Y %H:%M") 

Also, ich werde die folgenden Zeilen in Datenrahmen ts2 erhalten:

  f  , c 
    3,20/11/2014 15:00,0.01 
    4,20/11/2014 16:00,0.01 
    5,20/11/2014 17:00,0.01 
    6,20/11/2014 19:00,0.01 
    7,20/11/2014 22:00,0.20 

Für die Transformation zwischen TS1 und TS2 versuchte ich folgendes:

ts1$f<-as.Date(ts1$f, format = "%d/%m/%Y %H:%M") 
    ts2<-ts1[ts1$f %in% DATE1:DATE2, ] 
    ts2$f<-as.factor (ts2$f) 

Und danach werde ich Lage sein, die folgenden zu verwenden:

z<-read.zoo(ts2, tz = "", format = "%d/%m/%Y %H:%M", sep = ",") 
bp <- breakpoints(z ~ 1, h = 2) 

aber ich bekomme die folgende Fehlermeldung:

>  bp <- breakpoints(z ~ 1, h = 2) 
Error in `[[<-.data.frame`(`*tmp*`, i, value = c(1L, 11L, 6L, 3L, 4L, : 
    replacement has 10 rows, data has 5 

Antwort

1

Eine Sache, mit R im Auge zu behalten ist die Date-Klasse funktioniert nur mit Tagen und nicht der Zeit. In diesem Fall ist also strptime oder as.POSIXct die zu verwendende Funktion und nicht asDate. Auch wenn Sie das Datum/die Uhrzeit in ein POSIX-Objekt konvertieren, empfehle ich, nicht zurück zu einem Faktor zu konvertieren.

#Enter the data 
ts1<-read.table(header = TRUE, sep=",", text="row, f  , c 
     1,19/11/2014 12:00,0.01 
       2,19/11/2014 13:00,0.01 
       3,20/11/2014 15:00,0.01 
       4,20/11/2014 16:00,0.01 
       5,20/11/2014 17:00,0.01 
       6,20/11/2014 19:00,0.01 
       7,20/11/2014 22:00,0.20 
       8,20/11/2014 23:00,0.03 
       9,21/11/2014 16:00,0.01 
       10,21/11/2014 17:00,0.01 ") 
#convert to date/time 
ts1$f<-as.POSIXct(ts1$f, format="%d/%m/%Y %H:%M") 
#create limits 
DATE1 <- as.POSIXct("20/11/2014 16:00", format = "%d/%m/%Y %H:%M") 
DATE2 <- as.POSIXct("20/11/2014 23:00", format = "%d/%m/%Y %H:%M") 
#subset data from between limits 
ts2<-subset(ts1, f>=DATE1 & f<=DATE2)