我的数据按季度和每周组织。我能够通过使用Zoo包和TS包将季度数据转换为Date格式。但是,我不太确定是否可以分析每周数据。
例如,以下是数据的外观:
TESTDATA:
Fiscal.Year Fiscal.Quarter Seller Product.Bookings.Net Product.Bookings.Quantity Product.Family Sales.Level.1 Group Fiscal.Week
1 2015 2015.50 ABCD1234 4000 4 Paper cup Americas Paper Division 32
2 2014 2014.00 DDH1234 300 5 Paper tissue Asia Pacific Paper Division 33
3 2015 2015.00 PNS1234 298 6 Spoons EMEA Cutlery 34
4 2016 2016.75 CCC1234 289 7 Knives Africa Cutlery 33
如您所见,我能够将季日转换为日期格式。但是,我不确定我们是否可以分析每周数据。
我试图将每周数据(即财政周)转换为TS()类型的日期:
library("lubridate")
testdata$Fiscal.Year <- paste("1/1/",testdata$Fiscal.Year,sep = "")
testdata$Fiscal.Date <- dmy(testdata$Fiscal.Year) + lubridate::weeks(testdata$Fiscal.Week)
testdata$date_ts <- as.ts(testdata$Fiscal.Date)
我刚检查了输出:
class(testdata$date_ts)
[1] "ts"
所以,似乎我能够将这些周转换为TS类型,但这是在以下情况下发生的事情:
尝试1
我尝试在基类中使用POSIXlt和POSIXct函数(以便能够绘制图形等):
as.POSIXlt(testdata$date_ts)
Error in as.POSIXlt.default(testdata$date_ts) :
do not know how to convert 'testdata$date_ts' to class “POSIXlt”
ATTEMPT2
as.POSIXct.date(testdata$Fiscal.Date)
Error in as.POSIXct.date(testdata$Fiscal.Date) :
'testdata$Fiscal.Date' is not a "date" object
尽管如此,我的对象是类型:
class(testdata$Fiscal.Date)
[1] "Date"
我有两个相关的问题:
问题1:有人可以帮我解决这个错误吗?我不太确定上述两种方法的问题是什么。
问题2:有没有更有效的方法(在速度和代码行数方面)做我做过的事情?
我的帖子受以下因素影响:Time series weekly data并且在阅读此帖子后:Analyzing Daily/Weekly data using ts in R
请帮帮我。提前谢谢。
这是我的数据输入: dput(TESTDATA)
structure(list(Fiscal.Year = c(2015, 2014, 2015, 2016), Fiscal.Quarter = c("2015Q3",
"2014Q1", "2015Q1", "2016Q4"), Seller = c("ABCD1234", "DDH1234",
"PNS1234", "CCC1234"), Product.Bookings.Net = c(4000, 300, 298,
289), Product.Bookings.Quantity = c(4, 5, 6, 7), Product.Family = c("Paper cup",
"Paper tissue", "Spoons", "Knives"), Sales.Level.1 = c("Americas",
"Asia Pacific", "EMEA", "Africa"), Group = c("Paper Division",
"Paper Division", "Cutlery", "Cutlery"), Fiscal.Week = c(32,
33, 34, 33)), .Names = c("Fiscal.Year", "Fiscal.Quarter", "Seller",
"Product.Bookings.Net", "Product.Bookings.Quantity", "Product.Family",
"Sales.Level.1", "Group", "Fiscal.Week"), row.names = c(NA, 4L
), class = "data.frame")
答案 0 :(得分:0)
确定。所以,我想出了我的问题的答案:
我不应该将Date类的对象转换为TS,因为它不是周期性的。我宁愿使用动物园包的类来保持一致。
library("lubridate")
#take care of weeks:
testdata$Fiscal.Year <- paste("1/1/",testdata$Fiscal.Year,sep = "")
testdata$Fiscal.Date <- dmy(testdata$Fiscal.Year) + lubridate::weeks(testdata$Fiscal.Week)
#testdata$date_ts <- as.ts(testdata$Fiscal.Date)
ggplot(testdata,aes(x=year(testdata$Fiscal.Date),y=testdata$Product.Bookings.Net))+geom_bar(stat = "identity")
这很有效。
同样适用于我发布的其他两个问题。我发现这个pdf在我的分析中非常有用:https://faculty.washington.edu/ezivot/econ424/Working%20with%20Time%20Series%20Data%20in%20R.pdf
这解决了我的疑问。我仍然愿意阅读“每周”数据,然后 有效地 将其转换为“日期”类型