我遇到R
中的窗口功能问题。
newdata1 <-window(mergedall,start=c(as.Date(as.character("2014-06-16"))),end=c(as.Date(as.character("2015-01-31"))))
我收到了这个错误。我试图了解如何解决这个问题。谢谢!
Error in window.default(mergedall, start = c(as.Date(as.character("2014-06-16"))), :
'start' cannot be after 'end'
In addition: Warning message:
In window.default(mergedall, start = c(as.Date(as.character("2014-06-16"))), :
'end' value not changed`
答案 0 :(得分:1)
我知道这是一个旧帖子。但是,请确保“ mergedall”是使用ts命令创建的时间序列对象。
从任何向量或序列创建时间序列对象时,
some_result_ts <- ts(vector,frequency=xx,start=c(yyyy,m))
当yyyy小于您在window命令中指定的开始时,会出现这种错误。
例如,如果您采用数据框列,向量或序列,并且在使用ts命令进行ts形成过程中,以12的频率给出yyyy = 2010,m = 1并假定它是36个月的数据,结束日期是2013,12。
some_result_ts <- ts(vector,frequency=12,start=c(2010,1))
然后,在使用窗口函数时,如果您指定start = c(2014,1),则R将给出一条消息,即=>'start'不能在'end'之后且结束值不变
答案 1 :(得分:1)
同样,这是一个旧帖子。但是由于我通过搜索相同的错误偶然发现了它。我仍然想为将来的Google员工提供一些有用的信息。
我无法复制您的问题,因为您没有提供自己的 mergedall 数据集。因此,我从一个玩具示例开始,以显示可能出现问题的几个位置。真的没有那么困难。
潜在问题#1:
您最初没有创建ts对象。窗口函数在ts对象上运行,它不能只是直接从df获取的向量。首先使用ts函数使向量成为ts对象。然后为它分配适当的开始,结束,频率。
all <-seq(1:8) #eight observations in sequence
将这八个值指定为从201406到201501的每月观测值。频率12表示每月。
all.ts <- ts(all, start = c(2014,6), end = c(2015,1), frequency = 12)
潜在问题2:
您可能已经将您的mergedall系列分配为ts对象,但是具有不同的开始/结束/频率。我上面的例子是基于每月的观察。因此,即使它们是正确的示例,也不会与您日常使用的窗口功能匹配。窗口函数和ts对象必须保持一致。
在我的示例之后,窗口函数将如下所示:
newdata1 <-window(all.ts,start=c(2014,6),end=c(2015,1) )
答案 2 :(得分:0)
嗨,这是你可以尝试的,也许这就是解决方案,因为我也遇到了同样的问题。
您可能没有在时间序列对象中引用正确的索引值。
在下面的代码中,我添加了索引(i),如果对象只有一个系列或任何数字,或者使用简单的循环传递不同的值,则可以放置1。 希望它有所帮助。!
newdata1 <-window(mergedall[i],start=c(as.Date(as.character("2014-06-16"))),end=c(as.Date(as.character("2015-01-31"))))
答案 3 :(得分:0)
我也是未来的 googler,但没有一个答案对我有帮助。这是我的问题和解决方案:
MWE 问题:
set.seed(50)
data <- ts(rnorm(100), start(1850))
data.train <- window(data, start = 1850, end = 1949)
MWE 解决方案:
set.seed(50)
data <- ts(rnorm(100), start = (1850))
data.train <- window(data, start = 1850, end = 1949)
问题是设置开始日期时缺少等号。
结果变量 data
仍然是一个时间序列;但赠品是:“从 1 到 100 的时间序列”而不是“从 1850 到 1949 的时间序列”,这告诉我某些在创建时间序列时出错了。 >
根据 ts
文档,start()
函数不会将此作为错误引发,大概是因为它接受来自 {stats}
包的 ?ts
函数。< /p>
答案 4 :(得分:-2)
这可能是因为您的&#39; mergedall&#39;的格式引起的问题。宾语。 确保您有ts,xts或zoo对象。 尝试f.ex.以下是第一个,以确保对象的格式:
str(mergedall)