2017-01-28 13 views
1

私は、一連の潤滑間隔を扱い、日付がそのセットのメンバーの中にあるかどうかを判断しようとしています。私の間隔が重複していないが、一般的な答えは最高だろう )Rstats lubridate ...インターバルのベクトル

私は、私がデータ分析を開始する前に、間隔のそのセットにあるどのように多くの間隔を知らない:。


library(lubridate) 

#Create 4 dates; 2 pairs 

start1 <-ymd("2015-01-01") 
stop1 <-ymd("2015-01-08") 

start2 <-ymd("2015-02-01") 
stop2 <-ymd("2015-02-08") 

#Make 2 non-overlapping intervals 

interval1 <-start1%--%stop1 

interval2 <-start2%--%stop2 

#two more dates, each within an interval 

day1 <-ymd("2015-01-04") 

day2 <-ymd("2015-02-04") 

#now test the new dates against the intervals. 

day1 %within%interval1 #TRUE 

day2 %within%interval1 #FALSE 

day2 %within%interval2 #TRUE 

そして、私が行うことができます:私はそれについて考える場合、私がTRUEに強制することができます確信している

day2 %within%c(interval1, interval2) #(FALSE, TRUE) 

しかし、どのように私は?:

例えば
#Don't Run: 

INTERVALS <-c(interval1, interval2, ... intervalN) 

day2 %within% INTERVALS 

を求めることができますYが働いていたときにXが起きました。「Yが働いていたとき」は、間隔のベクトルです。

提案がありますか?

答えて

1

あなたはすべてをベクトル化し、次にチェックしたい日ごとに%within%を使用するlapplyを使用することができます。

library(lubridate) 

start <-ymd("2015-01-01", "2015-02-01") 
stop <-ymd("2015-01-08", "2015-02-08") 

days <-ymd("2015-01-04", "2015-02-04") 

lapply(days, `%within%`, start %--% stop) 
#> [[1]] 
#> [1] TRUE FALSE 
#> 
#> [[2]] 
#> [1] FALSE TRUE 

それは各区間にあるかどうかとdaysの各要素のためのリストです。 daysの各要素がいずれかの間隔内にあるかどうかを確認するには、*applyの無名関数を書き込みます。

sapply(days, function(x){any(x %within% interval(start, stop))}) 
## [1] TRUE TRUE