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