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

标签 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  

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

第二阶段
然后我想做的是,在每个不规则日期,将该日期的所有数据加在一起。由于所有时间序列都是不规则的,并且具有不同的规律性,我想使用 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 阶段来说是浪费的/不必要的。

第三阶段
创建了所有 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 <- paste("Ret$'",user,"'",sep = "");
情节(x)

但无法对此进行评估。

最佳答案

read.zoo有一个 aggregate=参数采用一个函数,该函数用于聚契约(Contract)一系列中重复时间的值。这里我们取mean系列中重复的天数,但您可以使用 sum或任何其他功能。 (如果数据来自文件,我们会将 text = Lines 中的 read.zoo 参数替换为类似 "myfile.dat" 的内容。)然后我们使用 na.locf填写 NA,对行求和,我们使用 na.omit放弃任何领先的 NA 给予 zsum .接下来我们计算一个规则间隔的时间网格 g和样条函数 splfun在网格上评估该函数及其导数,在转换回动物园后,给出 zsplzder .最后我们绘制它们。

Lines <- "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"

library(zoo)

z <- read.zoo(text = Lines, header = TRUE, split = 2, format = "%d/%m/%Y",
       aggregate = mean)
zsum <- na.omit(zoo(rowSums(na.locf(z)), time(z)))

g <- seq(start(zsum), end(zsum), "day")
splfun <- splinefun(time(zsum), coredata(zsum))
zspl <- zoo(splfun(g), g)
zder <- zoo(splfun(g, deriv = 1), g)

plot(merge(zspl, zder))

screenshot

关于R:具有重复时间索引条目的时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25812673/

相关文章:

r - RgoogleMaps 上的图例?

python - 尝试使用 Python/pandas 根据另一个数据帧的列的内部总和创建新的数据帧

ruby-on-rails - 许多索引 Postgresql

SQL 约束在两列中具有一个唯一值

C++ 列表删除重复的字符串

javascript - R在绘图选择重置后删除标记的矩形

r - Shiny 的错误 : 'file' must be a character string or connection

r - 调整pandoc.table列宽

python - 为什么要指定索引范围以便在 Python 中编写 while 循环列表?

java - 两个 hashCode 是否相等是否重要,即使这两个对象不是来自同一类型?