2014-12-02 3 views
0

Допустит, у меня есть dataframe, состоящий из 3-х колонка с датами:сравнить временные интервалы в R

index <- c("31.10.2012", "16.06.2012") 
begin <- c("22.10.2012", "29.05.2012") 
end <- c("24.10.2012", "17.06.2012") 

index.new <- as.Date(index, format = "%d.%m.%Y") 
begin.new <- as.Date(begin, format = "%d.%m.%Y") 
end.new <- as.Date(end, format = "%d.%m.%Y") 

data.frame(index.new, begin.new, end.new) 

Моей проблема: Я хочу, чтобы выбрать (подмножество) строку, где интервал начало и конец дата в течение 4 дней до индексного дня. Это, очевидно, только в строке № 2.

Можете ли вы помочь мне здесь?

+0

'interval1' и' interval2' - две отличия между датами (btw 'interval2' - отрицательный), один не может содержать другого ... или вы хотите узнать, что длиннее, или вы хотите узнать, находятся ли две первые даты между двумя последними? .. – Cath

+0

Я думаю, вы имеете в виду, что 'interval2' содержит' interval1'? Похоже, вы ищете 'interval1 <- seq (date.new [2], date.new [1], by =" day "); interval2 <- seq (date.new [3], date.new [4], by = "day"); все (интервал1% в% интервал2) ' –

+0

Трудно понять, что вы подразумеваете под словом« * интервал начала и окончания - в течение 4 дней до индекса-дня * ». Во второй строке не * все * интервал в течение 4 дней начинается с 'index.new' –

ответ

1

Ваш способ выразить проблему грязный, в первом случае dates.new[1]>dates.new[2] и во втором случае dates.new[3]<dates.new[4]. Создание вещей собственно:

interval1 = c(dates.new[2], dates.new[1]) 
interval2 = c(dates.new[3],dates.new[4]) 

Если вы хотите проверить interval2 СОДЕРЖИТ interval1:

all.equal(findInterval(interval1, interval2),c(1,1)) 
0

Отвод дайте мне знать, если это работает, и если это то, что вы хотите

library("timeDate") 

index <- c("31.10.2012", "16.06.2012") 
begin <- c("22.10.2012", "29.05.2012") 
end <- c("24.10.2012", "17.06.2012") 

index.new <- as.Date(index, format = "%d.%m.%Y") 
begin.new <- as.Date(begin, format = "%d.%m.%Y") 
end.new <- as.Date(end, format = "%d.%m.%Y") 

data <- data.frame(index.new, begin.new, end.new) 

apply(data, 1, function(x){paste(x[1]) %in% paste(timeSequence(x[2], x[3], by = "day"))}) 
Смежные вопросы