我尝试使用R为开始于24.02.2015并结束于13.04.2015的每日时间序列创建一个ts对象。我已经为每日数据设置了frequency=7,但我无法找到将确切日期作为开始参数的方法。
7gs2gvoe1#
我想这就是你想要的,使用'lubridate'中的decimal_date()函数来获得一个日序列的正确开始时间,并假设你想要索引为ts的值的向量被称为x,并且具有正确的长度:
decimal_date()
library(lubridate) df <- ts(x, start = decimal_date(as.Date("2015-02-24")), frequency = 365)
如果我用rnorm()生成一个适当长度的x,结果如下:
rnorm()
> 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))
kgsdhlau2#
如果你想要一个有日期列的表,你可以用途:
df <- data.frame(date = seq(from = as.Date("2015-02-24"), to = as.Date("2015-04-13"), by = 1))
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
o2rvlv0m4#
如果设置frequency = 7,则意味着序列在两个单位之间采样7天,因此单位为week。然后,所述期间的ts对象将定义如下:
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
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
4条答案
按热度按时间7gs2gvoe1#
我想这就是你想要的,使用'lubridate'中的
decimal_date()
函数来获得一个日序列的正确开始时间,并假设你想要索引为ts的值的向量被称为x,并且具有正确的长度:如果我用
rnorm()
生成一个适当长度的x,结果如下:注意,对于每日索引,您希望frequency = 365,而不是表示每周索引的7。
如果你想要一个可以在'zoo'中使用的日期向量,可以这样做:
因此,您将创建一个zoo对象,如下所示:
kgsdhlau2#
如果你想要一个有日期列的表,你可以用途:
kqlmhetl3#
使用xts库:
使用此方法,您不能或不必指定结束日期。
输出如下所示:
o2rvlv0m4#
如果设置frequency = 7,则意味着序列在两个单位之间采样7天,因此单位为week。然后,所述期间的
ts
对象将定义如下:请注意,
cycle
函数将用于一周(频率= 7),并将每个数据点标识为一周中的某一天。此外,您可以查看类似问题的答案:https://stackoverflow.com/a/75643632/6679066
创建于2023年3月5日,使用reprex v2.0.2