首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建带有参数化日期的tibbletime时间序列?

如何创建带有参数化日期的tibbletime时间序列?
EN

Stack Overflow用户
提问于 2017-10-12 09:20:08
回答 2查看 376关注 0票数 2

我想为特定的日期创建一个带有tibbletime的时间序列。我有:

代码语言:javascript
复制
Data_Start<-"2015-09-07 01:55:00 UTC"
Data_End<-"2015-09-10 01:59:00 UTC"

我想要创建一个时刻表,其中包含微小的示例,例如:

代码语言:javascript
复制
create_series(2015-09-07 + 01:55:00 ~ 2015-09-10 + 01:59:00,1~M)

参数应该是一个time_formula,在第17页中描述:https://cran.r-project.org/web/packages/tibbletime/tibbletime.pdf

这是可行的,但我不能传递这样的参数:

代码语言:javascript
复制
create_series(Data_Start~Data_End,1~M)

已经尝试了不同的方法来转换字符串,但是到目前为止还没有什么效果:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-12 11:07:47

tibbletime的作者。最近有人在GitHub上提出了一个问题。解决方案是使用rlang::new_formula()预构造公式.如果使用+日期,我们还需要一个特殊的助手函数来处理在公式中添加POSIXct。

这是帮手:

代码语言:javascript
复制
# Time formula creator
# Can pass character, Date, POSIXct
create_time_formula <- function(lhs, rhs) {

  if(!inherits(lhs, c("character", "Date", "POSIXct"))) {
    stop("LHS must be a character or date")
  }
  if(!inherits(rhs, c("character", "Date", "POSIXct"))) {
    stop("RHS must be a character or date")
  }

  if(inherits(lhs, "Date")) {
    lhs <- as.character(lhs)
  } else if (inherits(lhs, "POSIXct")) {
    lhs <- gsub(" ", " + ", lhs)
  }

  if(inherits(rhs, "Date")) {
    rhs <- as.character(rhs)
  } else if (inherits(rhs, "POSIXct")) {
    rhs <- gsub(" ", " + ", rhs)
  }

  rlang::new_formula(lhs, rhs)
}

在开始日期和结束日期的日期版本中使用助手函数

代码语言:javascript
复制
Data_Start<- as.POSIXct("2015-09-07 01:55:00")
Data_End  <- as.POSIXct("2015-09-10 01:59:00")

time_formula <- create_time_formula(Data_Start, Data_End)

create_series(time_formula, 1~M, tz = "UTC")

生产:

代码语言:javascript
复制
# A time tibble: 4,325 x 1
# Index: date
                  date
                <dttm>
 1 2015-09-07 01:55:00
 2 2015-09-07 01:56:00
 3 2015-09-07 01:57:00
 4 2015-09-07 01:58:00
 5 2015-09-07 01:59:00
 6 2015-09-07 02:00:00
 7 2015-09-07 02:01:00
 8 2015-09-07 02:02:00
 9 2015-09-07 02:03:00
10 2015-09-07 02:04:00
# ... with 4,315 more rows

tibbletime的未来版本中,我可能会为本例提供一个更加健壮的create_time_formula()助手函数。

更新: tibbletime 0.1.0已经发布,一个更健壮的实现允许直接使用公式中的变量。此外,公式的每一面都必须是与索引相同的字符或对象(即2013 ~ 2014应该是"2013" ~ "2014")。

代码语言:javascript
复制
library(tibbletime)

Data_Start<- as.POSIXct("2015-09-07 01:55:00")
Data_End  <- as.POSIXct("2015-09-10 01:59:00")

create_series(Data_Start ~ Data_End, "1 min")
#> # A time tibble: 4,325 x 1
#> # Index: date
#>    date               
#>    <dttm>             
#>  1 2015-09-07 01:55:00
#>  2 2015-09-07 01:56:00
#>  3 2015-09-07 01:57:00
#>  4 2015-09-07 01:58:00
#>  5 2015-09-07 01:59:00
#>  6 2015-09-07 02:00:00
#>  7 2015-09-07 02:01:00
#>  8 2015-09-07 02:02:00
#>  9 2015-09-07 02:03:00
#> 10 2015-09-07 02:04:00
#> # ... with 4,315 more rows
票数 3
EN

Stack Overflow用户

发布于 2017-10-12 10:30:44

我已经创建了具有多个季节性的时间序列,在提到的时间之间使用forecast()包,以分钟为频率。季节性期间因您的需求和数据长度而不同。

代码语言:javascript
复制
library(forecast)
Data_Start<-as.POSIXct("2015-09-07 01:55:00 UTC")
Data_End<-as.POSIXct("2015-09-10 01:59:00 UTC")

df = data.frame(tt = seq.POSIXt(Data_Start,Data_End,"min"),
                val = sample(1:40,4325,replace = T),stringsAsFactors = F)

# Seasonality Hourly, Daily
mts = msts(df$val,seasonal.periods = c(60,1440),start = Data_Start)
# Seasonality Hourly, Daily, Weekly
mts = msts(df$val,seasonal.periods = c(60,1440,10080),start = Data_Start)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46705859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档