2

ID と発売日を保持するデータフレームがあり、それぞれについて、各発売日がどの日付範囲 (Time_Seq) にあるかを知りたいです。

日付のベクトルは次のようになります。

data:
    ID     LAUNCH_DATE
1 50314486  2004-01-01
2 55842774  2004-01-27

そして、さまざまなデータ範囲を保持する時系列データフレームがあります。

head(Time_Table):
  Time_Seq   DateFrom     DateTo
1      726 2003-12-29 2004-01-04
2      727 2004-01-05 2004-01-11
3      728 2004-01-12 2004-01-18
4      729 2004-01-19 2004-01-25
5      730 2004-01-26 2004-02-01
6      731 2004-02-02 2004-02-08

理想的には、出力を次のようにしたいと思います。

    ID     LAUNCH_DATE   Time_Seq
1 50314486  2004-01-01      726
2 55842774  2004-01-27      731

現在、私は次のようにして、非常に長い手書きで1つの日付を解決できます。

Time_Table$Time_Seq[which( (date$LAUNCH_DATE[1]>=Time_Table$DATEFROM)&(date$LAUNCH_DATE[1]<=Time_Table$DATETO) )]

このようにループすることなく、より簡単な方法を提案できる人はいますか?

4

2 に答える 2

2

パッケージ内で遊んintervalでみたかっただけです:%within%lubridate

library(lubridate)

# create intervals
interval <- with(Time_Table, new_interval(ymd(DateFrom), ymd(DateTo)))

# for each LAUNCH_DATE, test whether it falls within an interval, and pick corresponding Time_Seq
data$Time_Seq <- sapply(data$LAUNCH_DATE, function(x) Time_Table$Time_Seq[ymd(x) %within% interval])
于 2013-09-05T14:36:24.940 に答える
1

cut連続変数をカテゴリに分割する機能は、日付に対して機能します。

data$Time_Seq <- cut(
  data$LAUNCH_DATE, 
  c(Time_Table$DateFrom, Time_Table$DateTo[nrow(Time_Table)]), 
  labels = Time_Table$Time_Seq,
  right = FALSE
)
于 2013-09-05T10:05:59.077 に答える