2016-04-11 2 views
-2

У меня есть следующий CSV файл:Фильтрация dataframes по датам для зоопарка точки останова

   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 

Я прочитал файл CSV, используя следующие:

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

Я хотел бы, чтобы отфильтровать все строки между даты (DATE1 и DATE2).

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") 

Таким образом, я получаю следующие строки в dataframe ts2:

  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 

Для преобразования между TS1 и TS2 я попытался следующие:

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) 

А потом я буду иметь возможность использовать следующее:

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

, но я получаю следующее сообщение об ошибке:

>  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 

ответ

1

Одна вещь, чтобы иметь в виду с R класс Дата работает только с днями и не раз. Таким образом, в этом случае strptime или as.POSIXct является функцией использования, а не as.Date. Кроме того, вы конвертируете дату/время в объект POSIX, я предлагаю не переходить обратно к коэффициенту.

#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)