如何在R中将带有YearMonth列的数据帧转换为时间序列

如何在R中将带有YearMonth列的数据帧转换为时间序列,r,zoo,R,Zoo,我有下面的数据集,它是一个数据帧。但我想把它转换成时间序列,这样我就可以做ARIMA预测了。 在SO中搜索了各种主题,但在YEARMONTH grain中找不到任何类似的主题。每个人都在谈论日期字段。但在这里我没有约会。 我使用下面的代码,但这会产生错误 dataset <- data.frame(year =c(2017), YearMonth = c(201701,201702,201703,201704), sales = c(100,200,300,400)) library(zo

我有下面的数据集,它是一个数据帧。但我想把它转换成时间序列,这样我就可以做ARIMA预测了。 在SO中搜索了各种主题,但在YEARMONTH grain中找不到任何类似的主题。每个人都在谈论日期字段。但在这里我没有约会。 我使用下面的代码,但这会产生错误

dataset <- data.frame(year =c(2017), YearMonth = c(201701,201702,201703,201704), sales = c(100,200,300,400))
library(zoo)
newdataset <- as.ts(read.zoo(dataset, FUN = as.yearmon))

# Error:
# 
#  In zoo(coredata(x), tt) :
#  some methods for “zoo” objects do not work if the index entries in ‘order.by’ are not unique

dataset一个选项是将
YearMonth
转换为一个月的第一个日期,并生成
ts

library(zoo)
dataset$YearMonth = as.Date(as.yearmon(as.character(dataset$YearMonth),"%Y%m"), frac = 0)
dataset
#   year  YearMonth sales
# 1 2017 2017-01-01   100
# 2 2017 2017-02-01   200
# 3 2017 2017-03-01   300
# 4 2017 2017-04-01   400
仅针对
ts
另一个选项如下:

dataset$YearMonth = as.yearmon(as.character(dataset$YearMonth),"%Y%m")

as.ts(dataset[-1])
# Time Series:
#   Start = 1 
# End = 4 
# Frequency = 1 
# YearMonth sales
# 1  2017.000   100
# 2  2017.083   200
# 3  2017.167   300
# 4  2017.250   400

谢谢你的回复…考虑到我有10年的数据,是否建议将yearmonth转换为date,然后使用它?有没有更好的办法?如何为给定的数据集生成ts,因为它仍然提供order.by column的错误?@Akash如果您的数据每个月都有一个条目,那么您所做的就是考虑每月的第一天。如果你只想坚持使用
月数
,那么转换为一个月数(比如说
1-120
10年可以是另一种选择)。顺便说一句,我希望您不是希望每天从数据中生成
ts
。好的。这是有道理的。我有每月谷物的数据。因此,我不想为每天生成ts。@Akash我编辑了我的答案,以演示如何使用
yearmon
对数据使用
as.ts
。看一看,谢谢你的帮助。非常感谢。我实际上需要类似于数据(AirPassenger)的数据,这些数据可以帮助我使用ARIMA预测进行绘图和预测。为此,我在数据框中输入了我提供的数据。您的实际数据中是否没有丢失或重复的
YearMonth
?因为如果没有,
newdataset