r - 在ts中使用日期字段?

标签 r time-series

我想知道在R中创建ts时如何利用已经存在的日期字段。
有时,您只是在拥有ts对象之前先有一个日期,例如

x <- as.Date("2008-01-01") + c(30,60,90,120,150)
# add some data to it    
df = data.frame(datefield=x,test=1:length(x))


现在,有没有办法在创建ts对象时将df的日期字段用作索引?因为:

   ts(df$test,start=c(2008,1,2),frequency=12)


(显然)完全忽略了我已有的日期信息。使用诸如acf之类的ts方法是为什么要使其成为ts对象的原因。我通常每月使用一个季度时间序列。

最佳答案

您不一定需要从头开始创建新类型的对象。您可以随时强制使用其他类,包括所需的tszooxts可以说是最有用和最直观的,但是还有其他一些。这是您的示例,被转换为动物园对象,然后我们将其强制转换为类ts以便在acf()中使用。

## create the data
x <- as.Date("2008-01-01") + c(30,60,90,120,150)
df = data.frame(datefield=x,test=1:length(x))

## load zoo
require(zoo)
## convert to a zoo object, with order given by the `datefield`
df.zoo <- with(df, zoo(test, order.by = x))
## or to a regular zoo object
df.zoo2 <- with(df, zooreg(test, order.by = x))


现在我们可以使用ts方法轻松地转到as.ts()对象:

> as.ts(df.zoo)
Time Series:
Start = 13920 
End = 14040 
Frequency = 0.0333333333333333 
[1] 1 2 3 4 5
> ## zooreg object:
> as.ts(df.zoo2)
Time Series:
Start = 13909 
End = 14029 
Frequency = 1 
  [1]  1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [21] NA NA NA NA NA NA NA NA NA NA  2 NA NA NA NA NA NA NA NA NA
 [41] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [61]  3 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [81] NA NA NA NA NA NA NA NA NA NA  4 NA NA NA NA NA NA NA NA NA
[101] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[121]  5


注意对象的两种表示方式(尽管我们可以通过将frequency参数设置为0.03333333来使zooreg版本与标准zoo对象相同):

> as.ts(with(df, zooreg(test, order.by = datefield, 
+                       frequency = 0.033333333333333)))
Time Series:
Start = 13920.0000000001 
End = 14040.0000000001 
Frequency = 0.033333333333333 
[1] 1 2 3 4 5


我们可以使用acf()中的zoo / zooreg对象,它将获得正确的滞后(每天观察一次,但每30天一次):

acf(df.zoo)




这对您而言是否直观取决于您如何查看时间序列。我们可以通过30天的间隔执行相同的操作:

acf(coredata(df.zoo))


在这里,我们使用coredata()提取时间序列本身,而忽略日期信息。

关于r - 在ts中使用日期字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5182262/

相关文章:

css - Xaringan 标题幻灯片

python - 如何检测时间序列数据(特别是)中存在趋势和季节性的异常?

python - 在Python中合并时间序列数据帧

linux - 在 Linux 中运行 R 时出错

r - 使用 geom_tile( ) 在 ggplot2 中绘制序列索引图

r data.table 更新join中的多列

python - Numpy:如何最好地对齐两个排序数组?

python - 如何修改 Pandas 中的日期时间索引格式(UTC)?

theta模型的python实现(theta方法)

R:有时 system.file 无法按文档工作