R

时间:2016-02-29 09:37:16

标签: r time-series xts

我有10天数据的xts时间序列对象。以分钟频率对数据进行采样。因此,对于每一天,我有1440个观察结果。我需要强制xtsts对象,以便我可以使用example中使用的stl函数。但是,在胁迫时,R会产生错误

ts(min_data,start=start(min_data),end = end(min_data),frequency=10)
Error in ts(min_data, start = start(min_data), end = end(min_data), frequency = 10) : 
  invalid time series parameters specified

我将频率设置为10,因为我使用了10天的数据。我不确定它应该是10还是1440.任何人都可以帮我解决这个错误。

MWE是

library(xts)
timevalues="20150101 0000/20150110 2359"
timesequence<- timeBasedSeq(timevalues)
min_data<-xts(rnorm(14400),timesequence)
ts_data<- ts(min_data,start=start(min_data), end = end(min_data),frequency=10)

更新 虽然我能够使用@Pascal建议的stl函数绘制图形,但我仍然缺少图形x轴中的时间分量。任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:4)

仅限xts解决方案,基于我查看Pascal's answer时的想法。

library(xts)
set.seed(42)
timevalues = "20150101 0000/20150110 2359"
timesequence <- timeBasedSeq(timevalues)
min_data <- xts(rnorm(14400),timesequence)

ts_data <- ts(as.numeric(min_data), frequency = 1440)
out <- stl(ts_data, s.window = "per")

ts_out <- merge(min_data, out$time.series)
plot.zoo(ts_out)

enter image description here

答案 1 :(得分:3)

$posttags = get_the_tags();

  $tags = array();
  if ($posttags) {
    foreach($posttags as $tag) {
      $tags[] = $tag->name;
    }
  }
  $newTags = implode($tags, ',');

  echo $newTags;

enter image description here

答案 2 :(得分:1)

如果您以每月,每季度和每年的频率拥有一个xts数据,则可能很有用(使用软件包:xts,stats,data.table,zoo)

xts_ts <- function(xts_data) {
  freq_list <-
    data.table::data.table(
      freq = c('month', 'quarter', 'year'),
      freq_n = c(12L, 4L, 1L),
      freq_format = c('%Y, %m', '%Y, %q', '%Y')
    )

  d_ferq <- xts::periodicity(xts_data)[["label"]]
  freq_n <- freq_list[freq == d_ferq, freq_n]
  freq_format <- freq_list[freq == d_ferq, freq_format]

  # Put NA if missing date
  empty <-
    zoo::zoo(order.by = seq.Date(zoo::index(xts_data)[1], zoo::index(xts_data)[nrow(xts_data)], by = d_ferq))
  no_misssing <- merge(xts_data, empty)

  if (d_ferq == 'quarter') {
    start_date <-
      format(zoo::as.yearqtr(xts::periodicity(xts_data)[["start"]]), freq_format)

  } else {
    start_date <-
      format(zoo::as.Date(xts::periodicity(xts_data)[["start"]]), freq_format)
  }

  stats::ts(zoo::coredata(no_misssing),
     start = as.integer(strsplit(start_date, split = ',')[[1]]),
     frequency = freq_n)
}

答案 3 :(得分:0)

我认为您正在寻找的是以下内容:

xts2ts <- function(XD) {
             maxRow <- nrow(XD)
             startYM <- c(.indexyear(acm[1]) + 1900, .indexmon(acm[1]))
             endYM <- c(.indexyear(acm[maxRow]) + 1900, .indexmon(acm[maxRow]))
             ts(coredata(XD), start = startYM, end = endYM, frequency = 12L)
}

答案 4 :(得分:0)

我最近发现了一个名为“ tsbox”的软件包。

它保证在时间序列类型之间轻松转换。 (此处为教程:https://cran.r-project.org/web/packages/tsbox/vignettes/tsbox.html

在这种情况下可能很有用。

这里有个例子:

library(tsbox)
nowTS <-ts_ts(formerXTS)

或者如果您想将ts转换回xts系列,反之亦然

library(tsbox)
nowXTS <-ts_xts(nowTS)