在这里改写的问题:
我已经取得了一些进展,但从 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 [...]
对于价值(使用滞后)很容易做到,但对于日期索引本身却不是。
我可能可以使用各种查找等来解决如何做到这一点,但它很混乱。您必须在其他字段上进行匹配,或者摆弄那些感觉不太“符合 R”的行号。
有没有一种漂亮、整洁、优雅的方式来做到这一点?
我很确定我会去“D'OH!” 只要有人给出答案!但到目前为止,我还没有在这个网站上找到滞后日期索引的答案。
我想这样做的原因是我想连续使用每一对日期来询问另一个系列。所以可能有更好的方法来做到这一点。