2015-05-19 3 views
1

Я новичок в R, так что это может быть очень простой проблемой, но это вызывает у меня много трудностей.Подмножество дат и времени на нескольких кадрах данных в R

Я пытаюсь подмножество между двумя значениями, найденными через кадры данных, и я испытываю трудности при попытке подмножества между этими двумя значениями. Сначала я опишу, что я сделал, что работает, а затем то, что не работает.

У меня есть два кадра данных. У одного есть серия данных о шторме, включая даты штормовых событий, а другая имеет ряд данных, соответствующих разряду для многих тысяч событий мониторинга. Я пытаюсь выяснить, соответствует ли какая-либо из данных разряда в начале и конце даты и времени окончания шторма.

То, что я сделал до сих пор выглядит следующим образом:

Пример разряда данные:

X. DateTime  Depth DateTime1   newcol 
1 3 8/2/2013 13:15 0.038 2013-08-02 13:15:00 1375463700 
2 4 8/2/2013 13:30 0.038 2013-08-02 13:30:00 1375464600 
3 5 8/2/2013 13:45 0.039 2013-08-02 13:45:00 1375465500 
4 6 8/2/2013 14:00 0.039 2013-08-02 14:00:00 1375466400 

Пример штормовой данные:

Storm newStart newEnd 
1 1 1382125500 1382130000 
2 2 1385768100 1385794200 

#Make a value to which the csv files are attached 
CA_Storms <- read.csv(file = "CA_Storms.csv", header = TRUE, stringsAsFactors = FALSE) 
CA_adj <- read.csv(file = "CA_Adj.csv", header = TRUE, stringsAsFactors = FALSE) 

#strptime function (do this for all data sets) 
CA_adj$DateTime1 <- strptime(CA_adj$DateTime, format = "%m/%d/%Y %H:%M") 
CA_Storms$Start.time1 <- strptime(CA_Storms$Start.time, format = "%m/%d/%Y %H:%M") 
CA_Storms$End.time1 <- strptime(CA_Storms$End.time, format = "%m/%d/%Y %H:%M") 

#Make dates and times continuous 
CA_adj$newcol <- as.numeric(CA_adj$DateTime1) 
CA_Storms$newStart <- as.numeric(CA_Storms$Start.time1) 
CA_Storms$newEnd <- as.numeric(CA_Storms$End.time1) 

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

CA_adj[CA_adj$newcol == "1375463700", ] 

Example output: 
X.  DateTime Depth   DateTime1  newcol 
    1 3 8/2/2013 13:15 0.038 2013-08-02 13:15:00 1375463700 

CA_adj[CA_adj$newcol == CA_Storms[1,19], ] 

X.  DateTime   Depth DateTime1   newcol 
7403 7408 10/18/2013 15:45 0.058 2013-10-18 15:45:00 1382125500 

CA_adj[CA_adj$newcol <= CA_Storms[1,20], ] 

Однако, когда я пытаюсь иметь его перемещения между двумя значениями, например, в:

CA_adj[CA_adj$newcol >= CA_Storms[1,19] & CA_adj$newol <= CA_Storms[1,20], ]

он отвечает так:

[1] X.  DateTime Depth  DateTime1 newcol 
<0 rows> (or 0-length row.names) 

Я знаю, что этот вывод неверен, поскольку, через беглый взгляд через мой большой набор данных, есть по крайней мере одно значение, которое подпадает под эти критерии.

Что дает?

+0

Пожалуйста, разместите образец данных и требуемый результат. – Soheil

+0

Не 'CA_adj [CA_adj $ newcol> = CA_Storms [1,19] | CA_adj $ newol <= CA_Storms [1,20],] 'что вы хотите? – Robert

+0

@ Соуэл благодарит вас за ваше предложение. Я отредактировал сообщение, так что теперь они добавлены. –

ответ

0
discharge<-data.frame(x=c(3,4,5,6), 
         DateTime=c("8/2/2013 13:15","8/2/2013 13:30", 
            "8/2/2013 13:45","8/2/2013 14:00"), 
         Depth=c(0.038, 0.038, 0.039, 0.039) 
        ) 
discharge$DateTime1<- as.POSIXct(discharge$DateTime, format = "%m/%d/%Y %H:%M") 

storm<-data.frame(storm=c(1,2), 
        start=c("8/2/2013 13:15","8/2/2013 16:30"), 
        end=c("8/2/2013 13:45","8/2/2013 16:45") 
       ) 

storm$start<- as.POSIXct(storm$start, format = "%m/%d/%Y %H:%M") 
storm$end<- as.POSIXct(storm$end, format = "%m/%d/%Y %H:%M") 


discharge[(discharge$DateTime1>=storm[1,2] & discharge$DateTime1<=storm[1,3]),] 
Смежные вопросы