ここに書き直された質問:
私はいくつかの進歩を遂げましたが、Rから奇妙な動作を得ています...
これが私が始めているxtsです
<no title> Value Value2 Value3
2002-08-21 21 2 27
2003-09-10 22 42 87
2004-02-12 23 62 67
2005-04-13 24 13 73
2006-05-13 25 4 28
2007-08-14 20 68 25
2008-03-06 19 82 22
私が作りたいもの:
<no title> Value Value2 Value3 ThisDate NextDate
2002-08-21 21 2 27 2002-08-21 2003-09-10
2003-09-10 22 42 87 2003-09-10 2004-02-12
2004-02-12 23 62 67 2004-02-12 2005-04-13
2005-04-13 24 13 73 2005-04-13 2006-05-13
2006-05-13 25 4 28 2006-05-13 2007-08-14
2007-08-14 20 68 25 2007-08-14 2008-03-06
2008-03-06 19 82 22 2008-03-06 NA
私はこのような関数を書きました:
StackUpAdjacentDates <- function(sourceTimeSeries)
{
returnValue <- sourceTimeSeries
thisDate <- as.character(index(sourceTimeSeries))
nextDate <- c(as.character(thisDate[2:length(thisDate)]),NA)
thisDate <- as.Date(strptime(thisDate, "%Y-%m-%d"))
nextDate <- as.Date(strptime(nextDate, "%Y-%m-%d"))
# set up thisDate in a new column
if ("thisDate" %in% colnames(returnValue) )
{
returnValue<-returnValue[,-which(colnames(returnValue)=="thisDate")]
}
returnValue <- cbind(returnValue, thisDate)
colnames(returnValue)[ncol(returnValue)] <- "thisDate"
returnValue$thisDate <- thisDate
# add nextDate in a new column
if ("nextDate" %in% colnames(returnValue) )
{
returnValue<-returnValue[,-which(colnames(returnValue)=="nextDate")]
}
returnValue <- cbind(returnValue,nextDate)
colnames(returnValue)[ncol(returnValue)] <- "nextDate"
#returnValue$nextDate <- nextDate
}
これにより、thisDate が正常に追加されます (コマンドラインでコードを段階的に実行します)。しかし、nextDate を追加するビットはそれを上書きしているようです! また、予想外の NA の行が表示されるようです。まだこれに取り組んでいます...
<no title> Value Value2 Value3 nextDate
2002-08-21 21 78 76 12305
2003-09-10 22 70 23 12460
2004-02-12 23 84 22 12886
2005-04-13 24 97 28 13281
2006-05-13 25 26 97 13739
2007-08-14 20 59 22 13944
2008-03-06 19 64 98 NA
<NA> NA NA NA NA
最初の列に「タイトルなし」を入れて、実際にはベクトル/マトリックスの一部ではなく、xts 日付インデックスであることを示しました。
余分な行を削除するのは、上書きの問題をまだ解決しておらず、実験していたためです。それは最終的な答えにある必要はありませんが、私が現在行っているところです。
そして最後に、この結果を調べて nextDate を日付に変換しようとすると....
> as.Date(returnValue$nextDate)
Error in as.Date.default(returnValue$nextDate) :
do not know how to convert 'returnValue$nextDate' to class "Date"
ということで、ちょっとモヤモヤ…。
以下の元の質問:
私はRに時系列を持っています(私は速く学んでいますが、明らかに十分に速くはありません!)
Value
2002-08-21 21
2003-09-10 22
2004-02-12 23
2005-04-13 24
2006-05-13 25
2007-08-14 20
2008-03-06 19
各行の新しい列の NEXT 行の日付インデックスを使用して、その派生物を作成したいと思います。
Value NextDate
2002-08-21 21 2003-09-10
2003-09-10 22 2004-02-12
2004-02-12 23 2005-04-13
2005-04-13 24 2006-05-13
2006-05-13 25 2007-08-14
2007-08-14 20 2008-03-06
2008-03-06 19 [...]
Value に対しては (Lag を使用して) 行うのは非常に簡単ですが、date-index 自体に対してはそうではありません。
おそらく、さまざまなルックアップなどを使用してそれを行う方法を理解できますが、面倒です。他のフィールドで一致させるか、「R に忠実」とは感じられない行番号をいじる必要があります。
それを行うための素晴らしく、きちんとした、エレガントな方法はありますか?
私は「D'OH!」に行くと確信しています。誰かが答えを出したらすぐに!しかし、これまでのところ、このサイトで日付インデックスの遅れについての答えを見つけていません。
私がこれをやりたい理由は、次に、日付の各ペアを連続して使用して、別のシリーズを調査したいからです。したがって、これを行うためのより良い方法があるかもしれません。