gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:51:43 26 4
gpt4 key购买 nike

我想知道在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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com