2017-04-18 8 views
0

私はxtsが1で、0は日付上のイベントを示しています。毎週金曜日の金曜日にRループを行い、その週に1があるかどうかを確認したいと思います。私はこれを持っています:'下付き文字が範囲外です。' in period.apply

> this = xts(sample(c(0,1), replace=TRUE, size=10), 
      order.by = seq.Date(as.Date('1990-01-05'), by = 1, length.out=10)) 
> this 
      [,1] 
1990-01-05 0 
1990-01-06 1 
1990-01-07 0 
1990-01-08 0 
1990-01-09 0 
1990-01-10 0 
1990-01-11 1 
1990-01-12 0 
1990-01-13 0 
1990-01-14 0 
> that = index(this)[.indexwday(this) == 5] 
> that 
[1] "1990-01-05" "1990-01-12" 
> period.apply(this, INDEX=that, FUN=function(x) max(x)) 
Error in `[.xts`(x, (INDEX[y] + 1):INDEX[y + 1]) : 
    subscript out of bounds 

ご覧のとおり、私はエラーが発生しています。どんな助け?

編集:

エラーが見つかりました。 'INDEX'は、日付ではなくベクトルまたは行番号であるはずです。これは動作します:

period.apply(this, INDEX=c(0, which(index(this) %in% that)), FUN=function(x) max(x)) 

しかし、私は元の問題に固執しています。シリーズの最初の出現をどうやって得るのか分からない。私はこれを試しました:

> period.apply(this, INDEX=c(0, which(index(this) %in% that)), FUN=function(x) index(x)[min(which(x==1))]) 
      [,1] 
1990-01-05 7309 
1990-01-12 7310 

しかし、私はこれらが何であるか分かりません。私は、インデックスには、関数に渡すために 'x'を使用して行くと推測しています。

私は何をしようとしているのですか?

答えて

0

私は任意の1年代は、その週のために存在する場合

をインデックス内の各金曜日までRループを持ちたいと を見ることが何をしたい明確ではないので、これは内のイベントの数をカウントあなたのための週。

7309、あなたはインデックス(X)に戻っている日付の数値に7310対応[...]

period.apply(this, INDEX=c(0, which(index(this) %in% that)), FUN=function(x) { sum(x==1)}) 
0

あなたはXTSオブジェクト各週の最初の日にしたい場合1の値は、次のことができています

  1. splitあなたXTS

    は、
  2. lapply関数が1に等しい最初の観測を見つけるために、それぞれの週のデータのリストにオブジェクトを
  3. rbindリストを単一のxtsオブジェクトにします。

そして、ここでは例です:

R> this 
      [,1] 
1990-01-05 1 
1990-01-06 0 
1990-01-07 1 
1990-01-08 0 
1990-01-09 1 
1990-01-10 1 
1990-01-11 0 
1990-01-12 0 
1990-01-13 1 
1990-01-14 1 
R> week1 
      [,1] 
1990-01-05 1 
1990-01-09 1 

set.seed(21) 
this <- xts(sample(0:1, 10, TRUE), seq(as.Date("1990-01-05"), by=1, length.out=10)) 
first1 <- function(x) first(x[x==1]) 
weeklist <- split(this, "weeks") 
week1 <- do.call(rbind, lapply(weeklist, first1)) 

そしてここでは、サンプルデータと結果です

関連する問題