R:具有重复时间索引条目的时间序列

时间:2014-09-12 16:20:28

标签: r indexing unique

我是R的n00b和堆栈溢出的n00b(刚刚加入),所以请原谅我,如果我没有使用标记(我不知道)或遗漏了自述文件中的内容。

如果你不介意的话,我会在这里解决我的全部问题,或许你可能会对我如何最好地解决这个问题有所了解!

第1阶段 为每个TS1构建单独的时间序列对象请在下面找到一个数据示例。基本上,我正在加载一个带有多个不规则时间序列的csv文件(例如TS1,TS2),所以在理想的世界中,我会将它们分成单独的,不规则的时间序列对象(例如动物园?),所以TS1,TS2,......这里讨论了这个问题(R/zoo: handle non-unique index entries but not lose data?),但我已经多次尝试使用这种方法,但都失败了。

 Date TS Data 
 21/05/2014 TS1 0.95  
 17/04/2014 TS1 1.02   
 27/03/2014 TS1 0.90   
 30/01/2014 TS1 0.80   
 12/12/2013 TS1 0.70  
 18/09/2013 TS1 0.67  
 01/11/2012 TS1 0.71  
 01/11/2012 TS1 0.70  
 21/05/2014 TS2 0.47  
 20/05/2014 TS2 0.51  
 16/05/2014 TS2 0.49  
 15/05/2014 TS2 0.55  
 10/05/2014 TS2 0.63  
 07/05/2014 TS2 0.77  

可以看出,问题是由于TS1的01/11/2012重复日期索引导致read.zoo不创建我的拆分数据对象。

第2阶段 我想要做的是,在每个不定期的日期,将所有数据添加到该日期。由于所有时间序列都是不规则的,并且具有不同的规律性,因此我想使用TS的先前值。例如。对于21/05/2014,示例中的此计算很简单,因为TS1和2都有一个条目,因此答案为0.47 + 0.95。但是对于20/05,只有TS2有一个条目,因此应该使用的TS1值是该日期的最新值,即17/04/2014的值{ 1.02,因此20/05/2014的计算应为0.51 + 1.02。实现这一点的最简单方法可能是将每个TS转换为每日值,以便使用先前的值直到新的数据点?但这对于下面的第3阶段来说是浪费/不必要的。

第3阶段 创建了所有TS'的聚合数据总和之后,我想做一个多项式曲线拟合。我还想区分这种曲线拟合,以找出由此拟合曲线预测的今天日期的变化率。

任何帮助将不胜感激!我觉得在这个阶段反复撞击墙壁会比做更多的事情更有趣!!

由于

更新:感谢Grothendieck,我现在拥有以下代码。

library(scales)  
library(zoo)  
library(ggplot2)  

f <- function (z) {  
zz <- read.zoo(z, header = TRUE, split = 2, format = "%d/%m/%Y", aggregate = mean);  
z.fill <- na.locf(zz);  
z.fill <- (z.fill >= 0.5) * z.fill;  
z.fill <- na.fill(z.fill,0);  
zfill.mat = matrix(z.fill, NROW(z.fill));  
z.sum <- rowSums(zfill.mat);  
zsum <- zoo(z.sum,time(z.fill));  
return(zsum);  
}  

DF <- read.csv(file.choose(), header = TRUE, as.is = TRUE);  
DF.S <- split(DF[-2], DF[[2]]);  
user <- DF[1,2];  
Ret <- lapply(DF.S,  f);  

我还有一个问题:
  Ret包含数据框列表。我可以通过键入Ret $ user来访问它,但由于用户不同,我需要使其动态化。我试图构建一个动态表达式,例如:     x&lt; - paste(“Ret $'”,user,“'”,sep =“”);
    情节(x)

但无法对此进行评估。

1 个答案:

答案 0 :(得分:3)

read.zoo有一个aggregate=参数,它接受一个函数,用于在同一系列中重复聚合值。在这里,我们采用系列中重复日期的mean,但您可以使用sum或任何其他功能。 (如果数据来自文件,我们会用text = Lines替换read.zoo中的"myfile.dat"参数。)然后我们使用na.locf填写NAs,求和行,我们使用na.omit删除任何提供zsum的主要NAs。接下来,我们计算一个规则间隔的时间网格g和一个样条函数splfun,评估该函数及其在网格上的导数,在转换回动物园后,给出zspl和{{1} }。最后我们绘制它们。

zder

screenshot