分析每周观察/数据

时间:2016-08-06 07:14:28

标签: r date

我的数据按季度和每周组织。我能够通过使用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")

1 个答案:

答案 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

这解决了我的疑问。我仍然愿意阅读“每周”数据,然后 有效地 将其转换为“日期”类型