2014-12-02 70 views
0

可以说我有数据帧由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'为负数),一个不能包含另一个...要么知道哪个更长,要么知道2个第一个日期是否在2个之间? .. – Cath 2014-12-02 09:39:13

+0

我想你的意思是'interval2'包含'interval1'?看起来你正在寻找'interval1 < - seq(dates.new [2],dates.new [1],by =“day”); interval2 < - seq(dates.new [3],dates.new [4],by =“day”); all(interval1%interval2)' – 2014-12-02 09:44:25

+0

很难理解“*开始日期和结束日期的间隔在索引日之前4天内*”的含义。在第二行不*所有*间隔是在4天内从'index.new'开始 – 2014-12-02 13:00:47

回答

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

如果你想检查时间间隔2 CONTAINS区间1:

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