我有10天数据的xts
时间序列对象。以分钟频率对数据进行采样。因此,对于每一天,我有1440个观察结果。我需要强制xts
到ts
对象,以便我可以使用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轴中的时间分量。任何帮助将不胜感激。
答案 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)
答案 1 :(得分:3)
$posttags = get_the_tags();
$tags = array();
if ($posttags) {
foreach($posttags as $tag) {
$tags[] = $tag->name;
}
}
$newTags = implode($tags, ',');
echo $newTags;
答案 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)