R语言 如何创建从特定日期开始的日时间序列

muk1a3rh  于 2023-03-10  发布在  其他
关注(0)|答案(4)|浏览(229)

我尝试使用R为开始于24.02.2015并结束于13.04.2015的每日时间序列创建一个ts对象。我已经为每日数据设置了frequency=7,但我无法找到将确切日期作为开始参数的方法。

7gs2gvoe

7gs2gvoe1#

我想这就是你想要的,使用'lubridate'中的decimal_date()函数来获得一个日序列的正确开始时间,并假设你想要索引为ts的值的向量被称为x,并且具有正确的长度:

library(lubridate)
df <- ts(x, start = decimal_date(as.Date("2015-02-24")), frequency = 365)

如果我用rnorm()生成一个适当长度的x,结果如下:

> df
Time Series:
Start = c(2015, 55) 
End = c(2015, 103) 
Frequency = 365 
[1]  0.4284579  1.9384426  0.1242242 -2.4002789 -0.4064669  0.6945274 -0.5172909  0.4772347  0.8758635 -1.7233406  0.5929249  1.5662611  1.0692173 -0.1354226
[15]  1.1404375  0.7714662 -0.2871663 -5.2720038 -1.7353146 -0.7053329  1.0206803  1.7170262 -0.3469172  0.2594851  2.0371700 -2.1549066 -0.6639050 -0.4912258
[29] -0.3849884 -3.0448583 -1.3317834  1.6173705  0.7176759 -0.8646802 -1.7697016  1.1114061  0.6941131 -0.1942612 -0.1836107 -0.5850649 -1.7449090 -3.3646555
[43] -0.4341833  1.9721407  1.4995265  1.7168002  1.8617295 -3.4578959  1.1639413

注意,对于每日索引,您希望frequency = 365,而不是表示每周索引的7。
如果你想要一个可以在'zoo'中使用的日期向量,可以这样做:

seq(from = as.Date("2015-02-24"), to = as.Date("2015-04-13"), by = 1)

因此,您将创建一个zoo对象,如下所示:

zoo(x, seq(from = as.Date("2015-02-24"), to = as.Date("2015-04-13"), by = 1))
kgsdhlau

kgsdhlau2#

如果你想要一个有日期列的表,你可以用途:

df <- data.frame(date = seq(from = as.Date("2015-02-24"), to = as.Date("2015-04-13"), by = 1))
kqlmhetl

kqlmhetl3#

使用xts库:

library(xts)
data_xts <- xts(x=dataframe$x, order.by=as.Date(dataframe$date, "%m/%d/%Y"))

使用此方法,您不能或不必指定结束日期。
输出如下所示:

[,1]
2020-01-01  7168.3
2020-01-02  7174.4
2020-01-03  6942.3
2020-01-04  7334.8
o2rvlv0m

o2rvlv0m4#

如果设置frequency = 7,则意味着序列在两个单位之间采样7天,因此单位为week。然后,所述期间的ts对象将定义如下:

start_dt <- as.Date("24.02.2015", "%d.%m.%Y")
end_dt <- as.Date("13.04.2015", "%d.%m.%Y")

# number of days
as.numeric(end_dt - start_dt + 1)
#> [1] 49

# Create a ficticious time series
data <- 1:49

# find the week and day that coresponds to start_dt
strftime(start_dt, "isoweek: %V, weekday: %u (%A)")
#> [1] "isoweek: 09, weekday: 2 (martes)"

ts_data <- ts(data, start = c(9, 2), frequency = 7)
ts_data
#> Time Series:
#> Start = c(9, 2) 
#> End = c(16, 1) 
#> Frequency = 7 
#>  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
#> [26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

请注意,cycle函数将用于一周(频率= 7),并将每个数据点标识为一周中的某一天。

cycle(ts_data)
#> Time Series:
#> Start = c(9, 2) 
#> End = c(16, 1) 
#> Frequency = 7 
#>  [1] 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4
#> [39] 5 6 7 1 2 3 4 5 6 7 1

此外,您可以查看类似问题的答案:https://stackoverflow.com/a/75643632/6679066
创建于2023年3月5日,使用reprex v2.0.2

相关问题