2013-09-23 60 views
1

我有data.frame一些什么样的这个[R转换data.frame到每天的时间序列对象

name units_sold order_date 
1 obj1   10 2013-09-21 
2 obj1   10 2013-09-22 
3 obj1   10 2013-09-23 
4 obj2  100 2013-09-21 
5 obj2  200 2013-09-22 
6 obj2  300 2013-09-23 
7 obj3   70 2013-09-21 
8 obj3  200 2013-09-22 
9 obj3   50 2013-09-23 

我想将其转换为一个时间序列对象,它应该具有以下值格式:

 2013-09-21 2013-09-22 2013-09-23 
obj1  10   10   10 
obj2  100   200  300 
obj3  70   200  50 

...一个星期

+0

欢迎来到堆栈溢出,并感谢您试图包含数据与您的问题。不幸的是,很难看到您的数据是如何基于上述结构进行构建的,或者您希望采用哪种新格式。请阅读'dput'的帮助页面(输入'?dput'),它将解释如何将对象转换为文本。更好的是,请仔细阅读[本文](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example),以了解如何生成一个很好的重现示例。最后,你应该包括你写的代码,即使它不起作用。 – SlowLearner

回答

0

我不认为预期的输出是一个TS对象。我把你的问题理解为一个从长到宽的格式的重塑问题。这里是2的方法:

使用dcastreshape2包:

library(reshape2) 
dcast(dat,name~order_date,value.var="units_sold") 

name 2013-09-21 2013-09-22 2013-09-23 
1 obj1   10   10   10 
2 obj2  100  200  300 
3 obj3   70  200   50 

从基础包使用reshape

reshape(dat,direction='wide',idvar='name',timevar='order_date') 

name units_sold.2013-09-21 units_sold.2013-09-22 units_sold.2013-09-23 
1 obj1     10     10     10 
4 obj2     100     200     300 
7 obj3     70     200     50 
+0

虽然这不会导致时间序列对象。 – Roland

+0

当然它不是一个ts对象。 – agstudy

3

在该R多元系列通常由每列一个系列来表示,不排。使用动物园包一个可以读取它像这样(保持示例自包含,我们在阅读它作为一个字符串,但你想的东西,如file="myfile.dat"更换text=Lines):

Lines <- "name units_sold order_date 
1 obj1   10 2013-09-21 
2 obj1   10 2013-09-22 
3 obj1   10 2013-09-23 
4 obj2  100 2013-09-21 
5 obj2  200 2013-09-22 
6 obj2  300 2013-09-23 
7 obj3   70 2013-09-21 
8 obj3  200 2013-09-22 
9 obj3   50 2013-09-23 
" 

library(zoo) 
z <- read.zoo(text = Lines, header = TRUE, index = 3, split = 1) 

这给:

> z 
      obj1 obj2 obj3 
2013-09-21 10 100 70 
2013-09-22 10 200 200 
2013-09-23 10 300 50 

从这一点上,你可以绘制它(plot(z)),将其转换为ts系列(as.ts(z)虽然每天的时间序列通常不与ts使用)和许多其它操作。请参阅5 zoo vignettes (pdfs)和动物园帮助页面。

(请注意,在这种情况下,header=TRUE实际上并不是必需的,因为由于其余行具有一个字段,即它们具有行名称,而第一行不。)