2013-09-23 106 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實際上並不是必需的,因爲由於其餘行具有一個字段,即它們具有行名稱,而第一行不。)