2014-12-02 73 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"))})